错误C2440:'初始化':无法从'classname*'转换为'classname'

Mik*_*ike 0 c++ class instance

我有一个名为extBlock的类.

然后我用这个做一个类的实例

extBlock mainBlock = new extBlock(1, 1024);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:错误C2440:'初始化':无法从'extBlock*'转换为'extBlock'

任何人都可以帮助我解决为什么我收到此错误.

我在网上看过用指针声明它的例子

extBlock *mainBlock = new extBlock(1, 1024);
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,它不会让我调用mainBlock的功能

Nic*_*yer 13

阅读您的C++语法:

extBlock mainBlock(1, 1024); // create a class instance (object) on the stack
mainBlock.memberFunction(); // call a member function of a stack object

extBlock * ptrBlock = new extBlock(1, 1024); // create an object on the heap
ptrBlock->memberFunctions(); // member access through pointers has different syntax
delete ptrBlock; // must deallocate memory when you're done with a heap object
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 9

从Java/C#切换?

在C++中,要初始化堆栈上的对象,您只需要使用

extBlock mainBlock (1, 1024);
...
mainBlock.call_func(1,2,4,7,1);
Run Code Online (Sandbox Code Playgroud)

new操作创建于堆中的对象,指针返回到它.要从指针访问函数,您需要取消引用它*:

extBlock* mainBlock = new extBlock(1,1024);
...
(*mainBlock).call_func(1,2,4,7,1);
Run Code Online (Sandbox Code Playgroud)

在C和C++中,a->b可以用来代替(*a).b:

mainBlock->call_func(1,2,4,7,1);
Run Code Online (Sandbox Code Playgroud)

此外,默认情况下,C++没有垃圾收集,因此您需要delete显式解除分配:

delete mainBlock;
Run Code Online (Sandbox Code Playgroud)


Mar*_*off 7

这不是C#:new extBlock返回指向a的指针extBlock,并且您尝试将该指针指定给值类型(这将是一个不兼容的转换).

你想在这里写的是

extBlock mainBlock(1, 1024);
Run Code Online (Sandbox Code Playgroud)

你不能在第二个代码片段上调用方法的原因可能是因为你使用了.运算符而不是取消引用指针所需的->(箭头)运算符.