带向量成员的全局结构

时间:2013-01-14 00:52:21

标签: c++ vector struct

为什么这个简单的代码块没有编译

//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

谢谢,

的Mustafa

4 个答案:

答案 0 :(得分:6)

您需要包含矢量标题文件

#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;
}

答案 1 :(得分:4)

您缺少<vector>标题。

#include <vector>

答案 2 :(得分:4)

如果您的代码示例已完成,则未包含矢量标头或可能包含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()吗?

答案 3 :(得分:1)

请记住包含相应的文件:

#include <vector>