MSVS 2015, C++, 使用参数调用构造函数会导致错误

MSVS 2015, C++, Calling constructor with arguments causes error

本文关键字:构造函数 错误 调用 参数 2015 C++ MSVS      更新时间:2023-10-16

我在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) 。这将防止不需要的参数临时副本。