我有一段时间没有做过C++编码,我的朋友在做作业时遇到了麻烦.我从来没有真正合作过const,而且这使得这成为一场噩梦,因为我无法弄清楚构造函数的正确语法.想象一下,我有这个dvd.h:
class DVD {
const string title;
int minutes;
double price;
public:
DVD(const string t, int m, double p);
}
Run Code Online (Sandbox Code Playgroud)
3个私有成员变量,string是const.构造函数也需要一个const string.
所以现在,dvd.cpp我可以做以下事情:
#include "dvd.h"
DVD::DVD(const string t, int m, double p) {
const string title = t;
minutes = m;
price = p;
}
Run Code Online (Sandbox Code Playgroud)
一切都在世界上很好.然而,当我修改minutes的dvd.h是const(这是他的教授是如何构造的文件),我们有这样的dvd.h:
class DVD {
const string title;
const int minutes; // Here is the change
double price;
public:
DVD(const string t, int m, double p);
}
Run Code Online (Sandbox Code Playgroud)
所以,现在minutes就是const,我得到下面的编译错误:
assignment of read-only member 'DVD::minutes' dvd.cpp
uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive] dvd.cpp
Run Code Online (Sandbox Code Playgroud)
我认为这是有道理的,因为我试图将值设置为const变量.所以我尝试做与const string titlein 相同的事情dvd.cpp来解决错误:
DVD::DVD(const string t, int m, double p) {
const string title = t;
const int minutes = m; // Was 'minutes = m;'
price = p;
}
Run Code Online (Sandbox Code Playgroud)
并得到以下(1)错误和(1)警告:
uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive] dvd.cpp
unused variable 'minutes' [-Wunused-variable] dvd.cpp
Run Code Online (Sandbox Code Playgroud)
所以我想我正在努力弄清楚这个darn语法是什么 ...... title并且minutes应该是const,但是构造函数的参数列表DVD只需要一个const string.我无法弄清楚我错过了什么 - 自从我上次用C++编写代码以来已经有一段时间了.
const string title = t;
Run Code Online (Sandbox Code Playgroud)
那声明了一个局部变量.一切都与世界不符:你没有将成员变量设置为你想要的值.要初始化成员,请使用构造函数的初始化列表:
DVD::DVD(const string t, int m, double p) :
title(t), minutes(m), price(p)
{}
Run Code Online (Sandbox Code Playgroud)
您的版本尝试默认初始化每个成员(因为初始化列表中未提及它们),然后分配每个成员.这对于无法初始化的成员(例如引用或没有默认构造函数的类类型)或分配给(例如const成员)的成员不起作用.
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |