我正在做一个关于c ++的小项目。 该项目要求我编写一个模板类,比方说A类。 我对A的要求很少,其中包括:
可以通过以下方式初始化A:
A<int> a;
A<int> a(5);
A<int> a = 5;
A<int> a = Empty;
我对3种初始类型的初始化没有任何问题,但是我对最后一个选项有点无能为力。
Empty是我应该定义的一些类,但是我想要。我最初的方向是创建一个(空)类EmptyClass:
class EmptyClass {};
静态实例化一个名为Empty的对象(因此任何使用过的A类也会知道Empty):
static EmptyClass Empty;
就是这样。显然,它不起作用。
整个(相关)模板声明:
class A{
private:
T _Value;
bool _empty;
public:
A();
A(const T value);
A(const EmptyClass none);
A(const A& opt);
A(const EmptyClass & none);
//Checks if the object is empty
const bool isEmpty() const;
//Destructor
~Optional();
A<T>& operator=(const EmptyClass& rhs);
A<T>& operator=(const A<T>& rhs);
};
目前我在这一行收到错误:
A<int> optionalInt = Empty
错误是:
错误:从'EmptyClass(*)()'无效转换为'int'[-fpermissive]
我被允许只使用c ++ 98标准。 想为解决这个问题找到方向。
谢谢!
答案 0 :(得分:0)
问题1:
您有两个构造函数可以将EmptyClass
作为输入。
A(const EmptyClass none);
A(const EmptyClass & none);
两者同样适合该行
A<int> a = Empty;
编译器无法消除要使用的构造函数的歧义。
简单的解决方法是删除其中一个。我建议你删除这两个构造函数中的第一个。
问题2:
这是一条非常奇怪的路线。
~Optional();
那需要:
~A();