MSVS 2015, C++, 使用参数调用构造函数会导致错误
MSVS 2015, C++, Calling constructor with arguments causes error
我在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;
}
}
主.cpp
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)
。这将防止不需要的参数临时副本。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- STL向量上出现奇怪的复制构造函数错误
- C++ 乘法定义的构造函数错误消息似乎错误
- 通过构造函数错误地播种梅森扭曲
- C++ 多态构造函数错误;标识符未定义
- 类组合中的构造函数错误
- C++中的构造函数错误
- 构造函数错误:错误:数字常量之前的预期“”,“”或“..”
- 这个奇怪的复制构造函数错误抱怨的是什么
- Singleton子类构造函数错误
- 默认构造函数错误 (C++)
- 基类构造函数错误
- 初始化列表构造函数错误带有CRTP
- C++可能存在写入位置的构造函数错误冲突
- 构造函数错误:需要标识符
- 复制构造函数错误:对象的类型限定符与成员函数不兼容