2014-04-06 45 views
0

所以我在我的C++程序中遇到了一些類型問題。 下面是代碼:C++ <vector>不會命名一個類型

#include "NHSFileparser.h" 
#include "NHSFileController.h" 
#include <string> 
#include <vector>  

std::string databasepath = "/media/sf_Documents/Skola/MVK/testdb/"; 
std::string dblang = "english"; 
std::vector<std::string> directories; 
std::string directory1 = "/media/sf_Documents/Skola/MVK/testdata/"; 
std::string directory2 = "/media/sf_Documents/Skola/MVK/testdata2/"; 
directories.push_back(directory1); 
directories.push_back(directory2); 
std::vector<std::string> queryterms; 
std::vector<std::string> return_files; 

int main() { 
NHSFileController fc(directory1, databasepath); 
bool b = fc.addDirectory(directory1); 
NHSDatabase database(databasepath, dblang); 
split(queryterms, "test", boost::is_any_of("_")); //Split on lots of chars 
std::cout << "Queryterms set." << std::endl; 
database.query(queryterms, return_files); 
std::cout << return_files.size() << std::endl; 
if (return_files.size() > 0){ 
    std::cout << "File found: " << return_files[0] << std::endl; 
} 
return 0; 
} 

當我編譯在Ubuntu 12.04使用g++ 4.6-std=c++0x我得到以下錯誤:

error: ‘directories’ does not name a type 

在兩條線上嘗試的push_back到目錄向量。

到目前爲止我發現的一切都是沒有正確聲明std :: vector的問題,而我(就我所知)已經完成了。

回答

5

您不能將語句放在函數之外,只能聲明和定義。將代碼放入main

4
directories.push_back(directory1); 

像這樣的代碼語句只能進入函數。

在C++ 11,你可以初始化在其聲明中的向量:

std::vector<std::string> directories {"...", "..."}; 

如果你停留在過去,那麼你可以移動push_back語句中main,或使用類似Boost.Assignment庫,或者寫一個函數返回一個填充矢量:

std::vector<std::string> make_directories() { 
    std::vector<std::string> directories; 
    directories.push_back("..."); 
    directories.push_back("..."); 
    return directories; 
} 

std::vector<std::string> directories = make_directories();