gpt4 book ai didi

C++ : problem when trying to create an instance

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:18 29 4
gpt4 key购买 nike

仍在努力回到 C++ 并摸索与 Java 的差异。

谁能告诉我这里出了什么问题?

测试.h

#ifndef TEST_H
#define TEST_H

class Test {
public:
int x, y;
Test();
virtual ~Test();
protected:
private:
};

#endif // TEST_H

测试.cpp

#include "Test.h"

Test::Test() {
x = 0;
y = 28;
}

Test::~Test()
{
//dtor
}

我的主要应用程序标题(我正在使用 openFrameworks)

#ifndef _TEST_APP
#define _TEST_APP

#include "ofMain.h"
#include "Test.h"

class testApp : public ofBaseApp{

public:
void setup();
[snip]
Test test_obj;

};

#endif

test_app.cpp

#include "testApp.h"
#include "Test.h"

//--------------------------------------------------------------
void testApp::setup(){
test_obj = new Test();
}

[snip]

这应该很简单,对吧?定义一个类Test,在test_app.h中声明一个类Test(test_obj)的变量,然后在test_app.cpp文件中创建一个实例并赋值给该变量。

但是,我在赋值行中从编译器收到此错误消息:

error: no match for ‘operator=’ in ‘((testApp*)this)->testApp::test_obj = (operator new(12u), (<statement>, ((Test*)<anonymous>)))’

我做错了什么?我在这里不明白什么?

最佳答案

您在 C++ 中将 new 与指针一起使用。它与 Java 不同。

Test test_obj 的声明应该是 Test* test_obj;

但是,您可以像 Test test_obj; 一样简单地在堆栈上声明变量。这样做意味着您不必 new 对象,会自动调用构造函数并因此初始化对象。

进一步扩展它:

C++中有两种创建对象的方法。

  1. 测试test_obj;
  2. 测试* test_obj = new Test();

第一个在堆栈上创建一个对象,当对象超出范围时它会自动销毁(调用析构函数)。

对于第二个,对象是在堆上创建的,你必须在对象上显式调用 delete 来销毁它,如下所示:

delete test_obj;

请记住,C++ 中没有自动内存管理,因此,您必须记住delete您使用new 创建的所有内容。

关于C++ : problem when trying to create an instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122419/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com