【发布时间】:2012-06-25 11:50:33
【问题描述】:
给定以下两个构造函数签名,是否可以用Couple("George", "Nora") 构造Couple?我的编译器抱怨如下所示的错误。如果我用Couple(std::string("George"), std::string("Nora")) 调用它,它可以编译。我猜隐式转换存在问题,这让我感到惊讶,因为我认为 char* 到字符串会很好。
class Person
{
public:
Person(const std::string& name);
};
class Couple
{
public:
Coordinate(const Person& p1, const Person& p2, const Optional<Person>& = Optional<Person>());
};
TestCouple.cpp:69: error: no matching function for call to `Couple::Couple(const char[7], const char[5])'
TestCouple.h:24: note: candidates are: Couple::Couple(const Person&, const Person&, const Optional<fox::Person>&)
【问题讨论】:
-
我没有看到问题,它应该可以工作。您应该发布完整的最小测试。
-
Coordinate是错字吗?不应该是Couple吗? -
C++ 中没有“隐式强制转换”之类的东西。强制转换是使用特殊强制转换语法的显式转换请求。你所追求的是隐式转换。
标签: c++ constructor implicit-conversion