从std :: string到class的隐式转换不起作用

时间:2015-09-04 13:36:19

标签: c++

我在Visual Studio 2010中收到错误C2664,表示没有从std::string转换到我的班级Filename

我真的不明白为什么会这样,因为我有接受std::string的构造函数,这适用于这样的代码:

std::string s = "t";
Filename f1 = s;
Filename f2(s);

但是我有一个功能

FileType FileFactory::detectFileType(Filename &oFilename) const;

在我尝试做的时候在我的代码中

Filename fn = "d:\\tmp\\test.txt";

// getBaseDir() returns an std::string
FactoryFileType type = detectFileType(fn.getBaseDir());

它出现了这个错误:

 error C2664: 'FileFactory::detectFileType': conversion of parameter 1 from 'std::string' to 'Filename &' is not possible

我的Filename类如下所示:

class Filename
{
public:
    Filename(std::string const &oFilename, std::string const &oBasePath = "");
    Filename(char const *oFilename = NULL, char const *oBasePath = NULL);
    Filename(const Filename &oSource);
    virtual ~Filename(void);

    void setBasePath(std::string const &oBasePath);
    void setBasePath(const char *oBasePath);

    const std::string &getBasePath(void) const;

    std::string getBaseDir(void) const;
    std::string getFileDir(void) const;

};

1 个答案:

答案 0 :(得分:1)

问题是,您的功能会收到对FileName的引用,但您尝试将rvalue传递给它。这是不正确的,临时值无法绑定到lvalue-reference,将参数更改为const reference,或创建FileName对象并将其传递。