使用boost字符串lib在visual studio中获取字符串编译错误

时间:2014-11-20 04:53:02

标签: c++ string boost visual-studio-2013

我正在尝试创建一个从ini文件读取的程序,但在Visual Studio中,我一直在错误的地方收到有关字符串标识符和分号的编译错误。我不是很擅长C ++所以它很可能是非常简单的东西,但这里的任何方式都是代码和错误列表。

INI.h

#ifndef INI_H
#define INI_H

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>

string INIreader(const string&, const string&);

#endif

INI_readnwrite.cpp

#include "INI.h"

using boost::property_tree::ptree;

string INIreader(const string& section, const string& name)
{
    ptree pt;
    read_ini("GameSettings.ini", pt);
    string value = pt.get<string>("section.name");
    return value;
}

mainCode.cpp

#include "INI.h"

using namespace std;
int main()
{
    string sec = "gameSettings";
    string val = "resXY";
    cout << INIreader(sec, val);
}

这是错误列表

error// file//  line//
error C2872: 'string' : ambiguous symbol    maincode.cpp    18
error C2146: syntax error : missing ';' before identifier 'sec' maincode.cpp    18
error C2065: 'sec' : undeclared identifier  maincode.cpp    18
error C2872: 'string' : ambiguous symbol    maincode.cpp    19
error C2146: syntax error : missing ';' before identifier 'val' maincode.cpp    19
error C2065: 'val' : undeclared identifier  maincode.cpp    19
error C2065: 'val' : undeclared identifier  maincode.cpp    20
error C2065: 'sec' : undeclared identifier  maincode.cpp    20
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   ini_readnwrite.cpp  6
error C2872: 'string' : ambiguous symbol    ini_readnwrite.cpp  6
error C2146: syntax error : missing ';' before identifier 'INIreader'   ini_readnwrite.cpp  6
error C2143: syntax error : missing ',' before '&'  ini_readnwrite.cpp  6
error C2086: 'int string' : redefinition    ini_readnwrite.cpp  6
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   ini_readnwrite.cpp  7
error C2974: 'boost::property_tree::basic_ptree<std::string,std::string,std::less<Key>>::get' : invalid template argument for 'Type', type expected ini_readnwrite.cpp  10
error C2974: 'boost::property_tree::basic_ptree<std::string,std::string,std::less<Key>>::get' : invalid template argument for 'Ch', type expected   ini_readnwrite.cpp  10
error C2146: syntax error : missing ';' before identifier 'value'   ini_readnwrite.cpp  10
error C2065: 'value' : undeclared identifier    ini_readnwrite.cpp  10
error C2065: 'value' : undeclared identifier    ini_readnwrite.cpp  11
IntelliSense: identifier "string" is undefined  INI.h   9
IntelliSense: identifier "string" is undefined  INI.h   9
IntelliSense: identifier "string" is undefined  INI.h   9
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   ini.h   9
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   ini.h   9
error C2146: syntax error : missing ';' before identifier 'INIreader'   ini.h   9
error C2146: syntax error : missing ';' before identifier 'INIreader'   ini.h   9
error C2143: syntax error : missing ',' before '&'  ini.h   9
error C2143: syntax error : missing ',' before '&'  ini.h   9

感谢。

1 个答案:

答案 0 :(得分:0)

当您尝试在头文件中使用std :: string时,需要使用完全限定名称:

std::string INIreader(const std::string&, const std::string&);

在INI_readnwrite.cpp中执行相同的操作,或者像在其他.cpp文件中一样添加“using”指令:

using boost::property_tree::ptree;
using namespace std;