使用 boost 字符串库在 Visual Studio 中获取字符串编译错误

Posted

技术标签:

【中文标题】使用 boost 字符串库在 Visual Studio 中获取字符串编译错误【英文标题】:Getting string compile errors in visual studio using the boost string lib 【发布时间】:2014-11-20 04:53:01 【问题描述】:

我正在尝试制作一个从 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】:

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

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

在 INI_readnwrite.cpp 中做同样的事情,或者像在另一个 .cpp 文件中一样添加一个“使用”指令:

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

【讨论】:

Why is “using namespace std;” considered bad practice?“只有”660+525 票是有原因的。阅读!还要阅读second most voted answer,我会说。 嘿,我只是想知道为什么我的 Visual Studio 在我使用它在 INI.h 中声明我的函数时没有为字符串调用加下划线? @Aaryn,根据错误列表,Visual Studio 确实识别出了有问题的函数声明:IntelliSense: identifier "string" is undefined INI.h 9。我不知道为什么它没有下划线,有时 Visual Studio 在编译之前无法检测到错误。

以上是关于使用 boost 字符串库在 Visual Studio 中获取字符串编译错误的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Visual Studio 2017 和 boost 构建的 python 中加载自定义 dll 时出现依赖错误

为啥 Boost 库在其线程屏障的实现中使用 m_ge​​neration 变量?

C++ 使用 Boost.asio 和 Beast 库在正文中发送数据

如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?

Visual Studio 2019安装boost 1.7.0库

Visual Stu dio(vs)2015企业版有没有?