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)
从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)
这不是C#:new extBlock返回指向a的指针extBlock,并且您尝试将该指针指定给值类型(这将是一个不兼容的转换).
你想在这里写的是
extBlock mainBlock(1, 1024);
Run Code Online (Sandbox Code Playgroud)
你不能在第二个代码片段上调用方法的原因可能是因为你使用了.运算符而不是取消引用指针所需的->(箭头)运算符.
| 归档时间: |
|
| 查看次数: |
19954 次 |
| 最近记录: |