我在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;
};
答案 0 :(得分:1)
问题是,您的功能会收到对FileName
的引用,但您尝试将rvalue
传递给它。这是不正确的,临时值无法绑定到lvalue-reference
,将参数更改为const reference
,或创建FileName
对象并将其传递。