C ++中常量属性的初始化构造函数错误

时间:2018-09-02 20:02:51

标签: c++

我想对const变量进行初始化,并在类外的构造函数中编写一些代码。

编译器错误

test.cpp:13:4: error: redefinition of 't'
t::t(int n){
   ^
test.cpp:7:5: note: previous definition is here
    t(int n) : num(n),z(n) {}
    ^
test.cpp:13:4: error: constructor for 't' must explicitly initialize the const
      member 'num'
t::t(int n){
   ^
test.cpp:9:15: note: declared here
    const int num;
              ^
test.cpp:21:7: error: no matching constructor for initialization of 't'
    t ob(4);
      ^  ~
test.cpp:4:7: note: candidate constructor (the implicit copy constructor) not
      viable: no known conversion from 'int' to 'const t' for 1st argument
class t

代码

#include<iostream>
using namespace std;

class t
{
public:
    t(int n) : num(n),z(n) {}
private:
    const int num;
    int z;
};

t::t(int n){
    cout<<"TEST";
}

int main()
{
    t ob(4);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您已经两次定义了相同的构造函数。
在这里:

t(int n) : num(n),z(n) {}

在这里:

t::t(int n){
    cout<<"TEST";
}

要解决此问题,您可以将其更改为:

t(int n);

并且:

t::t(int n) : num(n),z(n) {
    cout<<"TEST";
}

或者根据需要将定义保留在类内(在这种情况下,它将是内联的)。