我在 MS Visual Studio 2015 上面临以下问题。
我有一个Hotel
带有重载构造函数的类,它接受一个字符串参数。当我尝试创建一个使用重载而不是默认构造函数的对象时,编译器面临以下错误:
Error C2664 'std::Hotel::Hotel(const std::Hotel &)': cannot convert argument 1 from 'const char [7]' to 'const std::Hotel &'
酒店.h
namespace std {
class Hotel {
public:
string hotelName; // Hotel's name.
Hotel(); // Default constructor.
Hotel(string); // Overloaded constructor.
~Hotel(); // Default destructor.
};
}
酒店.cpp
namespace std {
Hotel::Hotel() { // // Default constructor.
}
Hotel::Hotel(string name) { // // Overloaded constructor.
hotelName = name;
}
}
主程序
int main() {
Hotel Palace("Palace");
}
在我所做的搜索中,我看到 MSVS 对字符串使用了两种方法。我发现的类似问题的解决方案是"Palace"
投入Hotel Palace(_T("Palace"));
当我尝试从重载构造函数创建一个对象时,会发生同样的事情,该构造函数的类型不是字符串作为参数。
这是否与 MSVS 有明确关系,还是我做错了什么?
任何帮助,将不胜感激。
您的代码中存在一些可能导致此错误的问题。
首先,不要使用namespace std {...}
. 用
using std::string
using std::cout
反而。您也可以使用using namespace std
,但不推荐这样做。Hotel(std::string)
也不错。
其次,您应该explicit
在构造函数中使用修饰符:
explicit Hotel(string);
这将防止一些意外的转换错误。
您还应该使用Hotel(const string&)
代替Hotel(string)
. 这将防止不需要的参数临时副本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句