call to constructor of 'Person' is ambiguous
时间: 2023-06-19 20:04:30 浏览: 47
这个错误通常出现在有多个重载的构造函数,而编译器无法确定调用哪一个构造函数时。通常情况下,这个错误可以通过提供更多的信息来解决,例如提供更准确的参数类型或者使用强制类型转换来调用正确的构造函数。
举个例子,假设有以下的Person类:
```cpp
class Person {
public:
Person(int age);
Person(std::string name);
};
```
如果你在创建一个Person对象时,传递的参数类型既可以是int也可以是std::string,那么编译器就无法确定应该调用哪一个构造函数。为了解决这个问题,你可以显式地指定构造函数的参数类型来消除歧义,例如:
```cpp
Person p1(20); // 调用 int 类型的构造函数
Person p2("John"); // 调用 std::string 类型的构造函数
```
如果你仍然遇到这个错误,你可以检查是否有其他类或命名空间中有同名的构造函数,或者检查是否有不必要的头文件导致了重复定义的问题。
相关问题
call to constructor of is ambi
题目中提到的 "call to constructor of is ambi" 意思是 "调用 is ambi 的构造函数产生歧义",这通常是由于输入参数不明确或者函数重载造成的。需要进一步的信息才能确定问题的具体原因和解决方案。
Call to implicitly-deleted default constructor of 'baseinfo'
这个错误提示通常是因为你在派生类中定义了构造函数,但是没有显式调用基类的构造函数,导致编译器默认调用基类的默认构造函数时出现了问题。
解决方法是在派生类的构造函数中显式调用基类的构造函数,例如:
```
class BaseInfo {
public:
BaseInfo() = default;
BaseInfo(const std::string& name, int age) : name_(name), age_(age) {}
private:
std::string name_;
int age_;
};
class DerivedInfo : public BaseInfo {
public:
DerivedInfo() : BaseInfo(), score_(0) {} // 显式调用基类的默认构造函数
DerivedInfo(const std::string& name, int age, int score) : BaseInfo(name, age), score_(score) {}
private:
int score_;
};
```
在派生类的构造函数中,调用基类的构造函数时需要注意参数的传递,如果基类有多个构造函数,需要根据需要选择合适的构造函数进行调用。