2016-04-22 60 views
-1

我有一个字符串变量在获取字符串的向量中。向量中的字符串变量导致大量错误(WinMainCRTStartup)

#include <vector> 
#include <string> 
using namespace std; 

vector <string> buffer; 

main(int argc, char *argv[]){ 
    buffer[0] = "foobar"; 
    return 0; 
} 

它会导致与启动这种大规模的命令行编译器错误:WinMainCRTStartUP的

多重定义...

然后误差的语无伦次的东西大概500线继续。 我已经用这个编译器(GNU编译器)成功编译了其他C++程序。我不知道为什么这个特定的程序导致错误。

+0

跟踪完整的错误。 –

+1

你如何建立你的程序?你是如何设立你的项目的?你用什么IDE(如果有的话)?什么版本?什么编译器? –

+1

此外,向量不像数组,当您创建一个向量时,它是空的,并且其中的任何索引都将超出范围并导致*未定义行为*。 –

回答

0

有两个问题。首先你需要添加返回类型为主:

int main() { 
    ... 
} 

二。你有一个空的缓冲区,所以当你正在做buffer [0] =“任何事情”时,你会破坏内存(当另一个函数访问被破坏的对象时可能会发现什么)。发生这种情况是因为operator []未选中向量。如果您将其更改为:

int main() { 
    buffer.at(0) = "foobar"; 
    return 0; 
} 

您将得到一个例外。

+2

但是,这是如何解释编译时的错误? –

+0

@HarryJohnston好点! :)在编译时,我们只需要添加:int main()而不是main()... :) –