在类 (C++) 之外设置 const int 成员变量
Set const int member variable outside the class (C++)
假设这是在Foo.h中:
class Foo {
private:
const int MAXIMUM;
}
如何将 MAX 初始化为 Foo.cpp 文件中的某个值(在本例中为 100(?我试过了
Foo::Foo() {
MAXIMUM = 100;
}
并得到错误"表达式必须是可修改的左值"。然后我试了
const int Foo::MAXIMUM = 100;
并得到错误"非静态数据成员不能在其类之外定义"。这基本上回答了我的问题,因为"这是不可能的",但这只是意味着我的大学在头文件上搞砸了。那么,这可能吗?
注意:这是大学作业,所以我无法更改头文件。我假设合乎逻辑的解决方案是在头文件中将 MAX 设置为 100。
您可以通过两种方式初始化 const 变量
在线初始化
class Foo {
private:
const int MAXIMUM = 100;
};
使用初始化列表
class Foo {
Foo()
: MAXIMUM(100) {
}
Foo(const int MAXIMUM)
: MAXIMUM(MAXIMUM) {
}
private:
const int MAXIMUM;
}
在下面的统计数据enter code here
Foo::Foo() {
MAXIMUM = 100;
}
MAXIMUM
已创建,并且您正在尝试修改其值,这是const
变量不允许的。
在下面的声明中
const int Foo::MAXIMUM = 100;
MAXIMUM
不是静态变量,因此它将与对象绑定。不能使用类名访问MAXIMUM
。
您需要一个初始值设定项列表:
Foo::Foo() : MAXIMUM(100)
{
}
在创建类对象之前,需要初始化">Const"和"Reference"变量。在您的情况下,
Foo::Foo() { // **End of this line, object is getting created.**
MAXIMUM = 100; // *This line, gets Error: "expression must be a modifiable lvalue"*
}
为了避免这种情况,您必须使用"初始化列表",其中在类构造函数创建对象之前将值分配给变量。
修复:
Foo::Foo():MAXIMUM(100) { // const variable is initialized
MAXIMUM = 200;
}
相关文章:
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 在类 (C++) 之外设置 const int 成员变量
- C++ 无法从 const int* 转换为 const_iterator
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- C++如何将 std::vector 转换为 const<int> std::vector<const int>?
- 如何在字符串向量中指向const int
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 为什么允许 int 和 const int 使用不同的转换函数?
- 如何通过头文件中的函数初始化 const int 数组?
- 为什么 const int 适用于字符大括号初始化?
- 不同类型的"decltype((const int)a)"和"decltype((cons
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- Const Int 宣布与 stoi 不被视为 const
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 杀死幻数:"const int" vs "constexpr int"(或者最后没有区别)
- 作为返回类型"const int&"做什么?
- 将const int std ::数组的n元素复制到int矢量中.怎么做
- 尝试使用 const int std::array 时出错
- 构造函数中没有从 'const int [5][4]' 到 'const int **' 的已知转换