2013-01-14 52 views
4

为什么这个简单的代码块未编译与向量成员的全球结构

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

谢谢

穆斯塔法

+5

您是否记得'#include '? –

回答

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

请记住,包括相应的文件:

#include <vector> 
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()?