【发布时间】:2017-05-31 04:36:20
【问题描述】:
我有简单的代码。
template<typename T>
class NamedObject{
public:
NamedObject(std::string& name, const T& value):nameValue(name), objectValue(value)
{
}
private:
std::string& nameValue;
const T objectValue;
};
int main(int argc, char* argv[])
{
NamedObject<int> no1("Smallest Prime Number",2);//error
NamedObject<int> no2(std::string("Smalledst Prime Number"),2);//works
return 0;
}
当我将第一个参数设为非引用时,会创建 no1 和 no2 对象。但是当我继续参考 Visual Studio 编译器时会出现以下错误,
错误 1 错误 C2664: 'NamedObject::NamedObject(std::string &,const T &)' : 无法将参数 1 从 'const char [22]' 转换为 'std::string &' c:\users\pkothari\documents\visual studio 2008\projects\stackoflw\stackoflw\stackoflw.cpp 36
如果 char * 可以转换为 std::string,为什么不能转换为 std::string& ?有什么办法让它工作吗?
【问题讨论】:
-
绑定引用≠构造实例
-
另一件需要考虑的事情:那不是
char *。 -
@user4581301
const char*? -
要解决这个问题,你的函数应该接受
std::string const& name -
@PranitKothari 在进行更改后,您应该会看到出现了不同的错误消息(与函数参数传递无关)。您还必须
#include <string>,并将类成员std::string& nameValue;更改为std::string nameValue;。 Working example