错误:'new'不能出现在常量表达式中
error: 'new' cannot appear in a constant-expression
class A
{
int data;
public:
void display()
{
cout<<"Value is "<<data;
}
void set_data(int x)
{
this->data = x;
}
A object = new A();
};
当我运行上面的代码时,我收到错误,指出"new无法出现在常量表达式中"。为什么会这样?
运算符 new 返回指针,但A
不是指针类型。你想要A*
:
A* object = new A();
您还希望将上述语句移到类主体之外,并将其放入适当的函数中,例如main()
:
int main() {
A* p = new A();
// do work
delete p;
}
话虽如此,您根本不需要指针,只需使用具有自动存储持续时间的对象:
A object;
或者,您需要考虑使用智能指针,例如 std::unique_ptr:
std::unique_ptr<A> p = std::make_unique<A>();
class A
{
public:
A * object = new A(); // In any case not: "A object = new A();"
};
或:
class A
{
public:
A object;
};
-
请参阅(让我们暂时假设您没有收到错误(,在这两种情况下,在 A 对象的第一次构造中,它会创建另一个 A 对象作为数据成员。这个 A 数据成员(我们称之为 object.object(反过来创建另一个 A 作为它的数据成员(我们称之为 object.object.object(,如此无穷大(或者直到没有更多的内存(。我的意思是,作为数据成员,它既不能A* object = new A();
,也不能A object;
-
我不确定你的意图是什么,但如果你想将一个 A 对象链接到另一个 A 对象,这个类应该是这样的:
class A
{
public:
A * object = nullptr
};
你必须将类 A 的对象变成main((。
void main(){
A object;
}
首先,不能在类声明中创建对象。类声明就像类的蓝图。也就是说,这些是我的类的组件 - 变量和成员函数。您无法实例化其中的任何内容,因为在此阶段不会分配内存。
请注意,您可以在其中一个成员函数(包括构造函数(中实例化对象。这些在对象创建期间分配内存时调用。
即使您在构造函数中使用此语句,当构造函数调用其构造函数时,您也会进入无限循环,依此类推,直到内存溢出。
你可以像这样在 main 中声明对象:
int main() {
A obj = new A();
//other operations
} //Object A is destroyed once you come out of main.
或者像这样动态
int main() {
A* obj = new A(); //dynamic allocation
//other operations
delete obj; //explicitly destroy
}
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 使用自动推导的 lambda 参数作为常量表达式
- 生成提升::hana::set 的常量表达式问题
- 为什么不能用常量表达式声明数组?
- 不是 lambda 函数中的常量表达式
- 函数调用在常量表达式中必须具有常量值
- 错误:constexpr 变量'struct2Var'必须由常量表达式初始化
- 关于在需要常量表达式的上下文中使用的glvalue常量表达式的问题
- 生成 constexpr 字符串表,不能产生常量表达式
- 整体模板参数。错误:在常量表达式中使用'this'
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:'new'不能出现在常量表达式中
- 我可以写出小于 -0.5 两个 ulps 的常量表达式双精度吗?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- C++ 使用变量而不是常量表达式初始化数组
- 使用函数参数作为常量表达式的一部分 - gcc vs clang
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"