我正在学习C ++中的运算符重载。这是我的问题:
当我使用Integer(int v)
而不是Integer(int v) : value(v) {}
时,我收到链接器错误。我不知道为什么。请帮忙!
class Integer {
private:
int value;
public:
Integer(int v) : value(v) { }
Integer operator++();
Integer operator++(int);
int getValue() {
return value;
}
};
答案 0 :(得分:0)
如果您按如下方式定义课程:
class Integer {
private:
int value;
public:
Integer(int v); // there's no body anymore
Integer operator++();
Integer operator++(int);
int getValue() {
return value;
}
};
然后,没有定义任何函数(除了getValue()
)和没有构造函数。
无论何时在某处实例化类,编译器都会生成对构造函数的调用。如果没有定义构造函数,链接器会抱怨。
您必须在类声明中提供所需的所有函数和构造函数的定义:
class Integer {
...
public:
Integer(int v) : value(v) { } // the { ... } is the constructor body
...
}
};
或在课堂声明之外:
Integer::Integer(int v) // outside class definition you need Integer:: prefix
: value(v) // this constructs the value member
{
cout << "class constructed with value "<<v<<endl;
}
原则上,您还应该在班级或外部定义两个运算符。但是,只要您不使用它们,链接器就不会抱怨。