从类指针到 int 的转换无效
Invalid conversion from class pointer to int
我无法弄清楚下面的代码中的问题是什么
class Node
{
private:
int index, value;
public:
Node(int index=0, int value=0):index(index),value(value){}
int getIndex()
{
return index;
}
int getValue()
{
return value;
}
};
int main()
{
Node n = new Node(10,10);
return 0;
}
我得到
从节点* 到 int 的转换无效
new
返回一个指针。你不能给n
分配指针,这是一个Node
。快速解决方法是将违规行更改为Node * n = new Node(10,10);
或auto n = new Node(10,10);
.
但是,在现代 c++ 中动态创建对象时,不再建议使用new
来解决。更喜欢auto n = std::make_unique<Node>(10, 10);
,这使n
成为一个聪明的指针。通过使用智能指针,您不必手动跟踪所有权,也不必记住只delete
一次对象。您还可以使代码在发生意外异常时更加健壮。您需要#include <memory>
.请参阅std::make_unique
和std::make_shared
:
#include <memory>
int main()
{
auto n = std::make_unique<Node>(10,10);
return 0;
}
尽管在这种情况下,似乎不需要动态分配。只需使用Node n{10, 10};
就足够了。
如果你想在堆栈上
Node n(10, 10);
对象将在堆栈上创建。它在函数结束时甚至之前超出了范围(例如,如果它是在循环中声明的(。
如果你想把它放在堆上
Node *n = new Node(10, 10);
对象在堆上分配,指向它的指针在堆栈上。它的行为更多,你会期望它与Java的"引用"有关。当指针超出范围时,不会删除该对象。相反,必须在某个时候调用delete
,否则内存将被泄漏(与Java的"引用"不同,它是垃圾回收的(。
使用 new 参数时,需要使用指针。 该行
Node n = new Node(10,10);
应该是
Node* n = new Node(10,10);
错误消息是因为从 new 返回的值是内存中的数字位置,而编译器知道表示此值的最接近的数据类型是 int。
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效