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

init constructor error for constant property in c++

本文关键字:初始化 构造函数 错误 属性 常量 C++      更新时间:2023-10-16

我想成员初始化我的常量变量,并在类外的构造函数中编写一些代码。

编译器错误

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

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

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";
}

或者如果你愿意,将定义留在类中(在这种情况下它将是内联的(。