5

この単純なコード ブロックがコンパイルされないのはなぜですか

//using namespace std;
struct test {
    std::vector<int> vec;
};
test mytest;

void foo {
    mytest.vec.push_back(3);
}

int main(int argc, char** argv) {
   cout << "Vector Element" << mytest.vec[0] << endl;
   return 0;
}

次のエラーが表示されます。

vectorScope.cpp:6:5: error: ‘vector’ in namespace ‘std’ does not name a type

vectorScope.cpp:11:6: error: variable or field ‘foo’ declared void

vectorScope.cpp:11:6: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]

vectorScope.cpp:12:12: error: ‘struct test’ has no member named ‘vec’

vectorScope.cpp:12:28: error: expected ‘}’ before ‘;’ token

vectorScope.cpp:13:1: error: expected declaration before ‘}’ token

ありがとうございました、

ムスタファ

4

4 に答える 4

8

ベクターヘッダーファイルを含める必要があります

#include <vector>
#include <iostream>

struct test {
    std::vector<int> vec;
};
test mytest;

void foo() {
    mytest.vec.push_back(3);
}

int main(int argc, char** argv) 
{
   foo();  
   if (!mytest.vec.empty())  // it's always good to test container is empty or not
   {
     std::cout << "Vector Element" << mytest.vec[0] << std::endl;
   }
   return 0;
}
于 2013-01-14T00:53:00.377 に答える
5

コードサンプルが完成している場合は、ベクターヘッダーまたはおそらくiostreamヘッダーを含めませんでした。また、foo関数は、パラメーターの()なしで誤って宣言されています。

#include <vector>
#include <iostream>

using namespace std;
struct test {
    std::vector<int> vec;
};
test mytest;

void foo()  {
    mytest.vec.push_back(3);
}

int main(int argc, char** argv) {
   cout << "Vector Element" << mytest.vec[0] << endl;
   return 0;
}

また、未定義の動作であるインデックス0の空のベクトルを添え字で示します。それを行う前に、おそらく最初にfoo()を呼び出したいと思いますか?

于 2013-01-14T01:06:31.370 に答える
4

<vector>ヘッダーがありません。

#include <vector>
于 2013-01-14T00:53:36.260 に答える
1

適切なファイルを含めることを忘れないでください。

#include <vector>
于 2013-01-14T00:53:16.320 に答える