【问题标题】:C++: Trouble Using String as Argument of a FunctionC++:使用字符串作为函数参数的麻烦
【发布时间】:2011-04-17 07:18:52
【问题描述】:

好的,我在处理以下代码时遇到了问题(在头文件中):

#ifndef XML_H_INCLUDED
#define XML_H_INCLUDED
#include "libxml/parser.h"
#include "libxml/xmlwriter.h"
#include <string>


class XmlFile{
public:
    XmlFile(string filename){
        file = xmlParseFile(filename);


    }
    xmlDocPtr file; //Pointer to xml file


};



#endif // XML_H_INCLUDED

该文件包含在主源文件中(但未被访问,因此其内容并不重要)。

我不断收到以下错误(在代码块中):

error: cannot convert 'std::string' to 'const char*' 
for argument '1' to 'xmlDoc* xmlParseFile(const char*)'|

我遇到过很多次,这让我发疯。

如果可能,我宁愿不使用向量(在初始化函数时增加了另一个步骤。

我做错了什么?我已经尝试查找此内容,但没有找到任何令人满意的答案。

提前致谢。

【问题讨论】:

    标签: c++ function char constants arguments


    【解决方案1】:
    file = xmlParseFile(filename.c_str());
    

    【讨论】:

    • 我应该补充一点,那行代码工作正常,但我很好奇它到底做了什么(这样我以后可以避免类似的错误)。它只是一个在“String”中定义的返回字符串的函数吗?它是如何解决 const char* 问题的?
    • @Biosci3c,std::string 有一个方法 c_str(),它返回一个 const char*。 xmlParseFile 需要一个 const char* (就像编译器错误所说)......不是 std::string。
    • 它返回一个const char*,它指向组成该字符串的以空字符结尾的字符序列。一个普通的“C”字符串,因此是方法的名称。
    • 啊,谢谢,有道理。好的,这回答了我的问题。哇,你们真快。 :) 本可以早点为自己省去这么多麻烦。
    • @Biosci3c,您的 XmlFile 构造函数也应更改为... XmlFile(const string& filename)。这样可以避免复制字符串,并且还可以向使用您的类的任何人传达您不会更改其值的信息。
    最近更新 更多