类的构造函数声明

时间:2017-11-05 15:20:46

标签: c++ class constructor

我正在学习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;
    }
};

1 个答案:

答案 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;         
} 

原则上,您还应该在班级或外部定义两个运算符。但是,只要您不使用它们,链接器就不会抱怨。