• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メンバ変数のサイズを条件に使いたいのですが)

メンバ変数のサイズを条件に使いたいのですが

このQ&Aのポイント
  • vectorコンテナの中の構造体のメンバ変数のサイズをfor文の条件に使いたいのですが、プログラム実行中にエラーが出てしまいます。
  • コンパイルエラーは出ませんでしたが、このようなことはできないのでしょうか?
  • どなたか助けてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

× vec[0].koumoku[0] = string("aiueo"); × vec[0].koumoku[1] = string("kakiku"); kouzoutai x; x.koumoku.push_back("aiueo"); vec.push_back(x); x.koumoku[0] = "kakiku"; vec.push_back(x);

skinhead_juggler
質問者

お礼

なんと要素の無い所に代入しようとしていたのですね。 とても助かりました。 ありがとうございます。おかげで解決致しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CygwinでSTLの勉強をしていますが・・・

    今C++のSTLの勉強をしています。 本に載っているサンプルプログラムを打って実行しようとしたら エラーがでてしまいました。 エラーの内容はprintとtotalが見つかりませんというエラーです。 コンパイラはcygwinを使ってます。 よろしくお願いします。 /*for_each()アルゴリズム*/ #include<iostream> #include<algorithm> #include<vector> #include<functional> #include<> using namespace std; int main() { int n[]={100,200,300,400,500,600}; int size=sizeof n/sizeof(int),i; vector<int> v; for(i=0;i<size;++i) v.push_back(n[i]); for_each(v.begin(),v.end(),print<int>()); cout<<endl; cout<<(for_each(v.begin(),v.end(),total<int>())).gettotal()<<endl; return 0; }

  • この文章正確ですか?

    #include <string> #include <iostream> using namespace std; int main(){ string s1; s1 = "こんにちわ"; count << s1 << endl; } これをコンパイルしようとしてもできません。 どこが間違っているのでしょうか?

  • vectorに格納されたオブジェクトの廃棄

    次のようなテストプログラムを作ってみました。 OSはVineです。 #include <iostream> #include <string> #include <vector> using namespace std; class Neko{ string name; public: Neko(){} Neko(string n):name(n){} void SetName(string n){name=n;} void Naku() const; }; void Neko::Naku() const{ cout << "名前は" << name << endl; } int main(){ int i; int num; string temp; vector <Neko> x; for(i=0;i<num;i++){ Neko *y=new Neko; x.push_back(*y); } for(i=0;i<num;i++){ cout << "名前を入力" << endl; cin >> temp; x[i].SetName(temp); } for(i=0;i<num;i++)x[i].Naku(); delete [] x;・・・※ } 廃棄(※のところ)するとき、これでは コンパイルエラーになってしまいます。 for文で回しても同じです。 どのように書けばよいのでしょうか? vectorにはポインタではなくオブジェクトが 入っていることに注意してください。

  • C++ 構造体型のvector配列でエラーがでます

    構造体のvector配列を関数に渡しています。 以下のソースコードで、3点エラーがでます どのように変更すればよいですか? #include<stdio.h> #include<stdlib.h> #include<iostream> #include <vector> using namespace std; std::vector<int> v; typedef struct fukusosu{ int a; int b; }FUKUSOSU; int sort(vector<FUKUSOSU> v[], int N){ FUKUSOSU tmp; int j; for(int i = 0 ; i < N - 1 ; i++){ j = i ; for(int k = i + 1 ; k < N ; k++){ if(v[j].a > v[k].a){j = k;}//ここのaに対して、エラーがでます } tmp = v[j];//ここのイコールに対して、エラーがでます v[j] = v[i]; v[i] = tmp;//ここのイコールに対してエラーがでます } } int main(void){ int N; // 要素数 cin >> N; vector<FUKUSOSU> v(N); for(int i = 0; i < N; ++i){ cin >> v[i].a; cin >> v[i].b; } }

  • ヘッダーファイルがインクルードされない(?)

    ダイアログ上のボタンをクリックすると指定されたテキストファイルをオープンし、 ファイルの内容をスペースで区切って格納するプログラムを http://oshiete1.goo.ne.jp/kotaeru.php3?q=474452 こちらを少し変えて作ったのですが、 コンパイル・デバッグを行なうと 'std' : 識別子がクラス名でも名前空間名でもありません。 'vector' : 定義されていない識別子です。 'ofstream' : 定義されていない識別子です。 と言ったようなエラーになってしまいます。 必要なヘッダーファイルはインクルードされているはずなのですが・・・。 この原因は何故でしょうか? /**********プログラムソース**********/ #include <iostream> #include <fstream> #include <string> #include <vector> #include <utility> #include "stdafx.h" #include "SCHEDULE.h" #include "SCHEDULEDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // ~中略~ void CSCHEDULEDlg::OnReq() {    typedef std::pair<std::string,std::string> item;    std::vector<item> participation;    std::ofstream file(dataFile.txt);    std::string line;    while ( std::getline(file,line) ) {      std::string::size_type pos = line.find(' ');      participation.push_back(item(line.substr(0,pos), line.substr(pos+1)));    }    for ( int i = 0; i < participation.size(); ++ i) {      std::cout << "result = " << participation[j] << "]\n";    } }

  • C++ 多態とstlのコンテナについて

    以下のように、継承関係を作ります。 --------------------------------------- #include <iostream> #include <list> #include <vector> using namespace std; struct Base { virtual ~Base() = 0; }; Base::~Base() {} struct Sub1 : Base { int v; Sub1(int i) { v = i; } }; struct Sub2 : Base { double v; Sub2(double d) { v = d; } }; --------------------------------------- この場合、 Sub1, Sub2 のインスタンスをなにかコンテナに入れたい場合は、一般的には以下のように書けばいいのでしょうか? ---------------------- list<Base*> l; vector<Base*> v; Sub1 s1(3); Sub2 s2(4.4); l.push_back(&s1); l.push_back(&s2); v.push_back(&s1); v.push_back(&s2); ---------------------- list<Base>, vector<Base>も試しましたが list<Base> は宣言したところで vector<Base> は push_back() したところで コンパイルエラーになりました。 これは、こういうものなのでしょうか? むしろ、struct(もしくはclass)の書き方を変えたりすれば、問題なくなったりするのでしょうか? 全体としては、C++は参照などあって、どいう場合にポインタ使うべきなのかそういう部分に混乱しているような気もします。 いろいろ質問してしまって、申し分けないですがなにか ひとつでも答えられるものがあれば回答してもらえると ありがたいです。

  • boostスマートポインタ(shared_ptr)を使用した、簡単なフ

    boostスマートポインタ(shared_ptr)を使用した、簡単なファイルの読み込みとループ処理で困っています。 以下に示すような、テキストファイルから情報を読み取って構造体のvectorをつくる処理をshared_ptrを使って行おうとしています。 input.txt-- >Taro /boy /8 years old >Hanako /girl /6 years old /likes candy ----- このファイルの'>'で始まる行は'名前'として、それ以外の '/ 'で始まる行はvectorに入れて、このふたつを個人ごとにまとめて構造体として管理するという形をとりたいと考えています。 つまり構造体の要素は <名前の行> <それ以外の行が入ったベクター> となります。 ファイル読み込みの過程で '>' を認識したらこれらのメモリ領域を確保し、shared_ptrで管理したいと考えています。 出来た構造体をベクターに入れ、ファイル読み込みのあとに出力する、という形でプログラムを以下のように書きました。  #include <string> #include <fstream> #include <iostream> #include <boost/shared_ptr.hpp> using namespace std; //構造体定義  struct my_struct{ std::string name;    std::vector<std::string> vector_of_string;  } ; int main(void){ std::ifstream ifs("input.txt"); //構造体を入れるベクター std::vector<my_struct> vector_of_my_struct; std::string buf; boost::shared_ptr<my_struct> SMARTptr_my_struct(new my_struct); boost::shared_ptr<vector<string>> SMARTptr_vector_of_string(new vector<string>); while(ifs && std::getline(ifs, buf)) { if(buf[0] == '>'){   //構造体の領域を作成 boost::shared_ptr<my_struct> SMARTptr_my_struct(new my_struct); //'/'で始まる行を格納しておくベクター領域の作成 boost::shared_ptr<vector<string>> SMARTptr_vector_of_string(new vector<string>); //構造体に作成されたベクターを入れる (*SMARTptr_my_struct).vector_of_string = *SMARTptr_vector_of_string; //構造体にこの行ををnameとして入れる (*SMARTptr_my_struct).name = buf; //ここで新たに作られた構造体をベクターに入れる vector_of_my_struct.push_back(*SMARTptr_my_struct); } if(buf[0] == '/'){ //この行をstring格納用のベクター(if(buf[0]=='>') ですでに作られている)に入れる (*SMARTptr_vector_of_string).push_back(buf); } この後、構造体のベクターのループから情報を出力しますが字数制限のため省略させていただきます。 input.txtと同じ内容が出力されることを期待したのですが、実際は'>'で始まる名前の行しか出力されません。 どうやらベクターへのpush_backができていないか、そもそもshared_ptrの扱いに根本的な間違いがあるのでは?と思っているのですが、原因がわかりません。環境はVC++2008 express edition, boost 1.38です。 解決方法、原因、アドバイスなど分かりましたらよろしくお願いします。

  • C++の課題について教えてください。

    配列のコピーに関する問題なのですが、なぜエラーになるのか教えてください。 #include <iostream> using namespace std; void arrayCopy(int target,int original,int size){ for(int i=0;i<size;i++){ target[i]=original[i]; } } int main(){ const int size=5; int original[size]={1,2,3,4,5}; int target[size]; arrayCopy(target,original,size); print(target,size); }

  • C++での <iostream.h>と<iostream>とusingnamespaceの関係等を教えてください。

    どうでもいい質問なのですが… C++で色々とソースを打っていると気づいたのです。 #include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。 また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。 だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。 なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

  • メモリ開放の質問ですが

    #include<iostream> using namespace std; void main(void) { int i; char *s,*t; s=new char[9];t=s; for(i=0;i<9;i++)*(s+i)=i; for(i=0;i<9;i++)cout<<(int)s[i]<<endl; delete s; delete t; //error } において2回目のdelete tでエラーになりますが #include<iostream> using namespace std; void main(void) { int i; char *s,*t; s=new char[9];t=s+2; for(i=0;i<9;i++)*(s+i)=i; for(i=0;i<9;i++)cout<<(int)s[i]<<endl; delete t; delete s; } はエラーになりません (s=t+2をs=t+1に変更するとエラーになる) 実際にdeleteは何を行いエラーを引き起こすのでしょうか? エラーになるメカニズムを教えてください