我是基于面向对象编程的新手,所以这是个愚蠢的问题:
我创建了一个名为 algorithmObject 的类。基本上,它有很多与之相关的功能。
我已经创建了一个QT GUI,我想创建一个类型为algorithmObject的公共对象,因为我希望能够访问各种onClick事件中的成员函数。
所以在我的 GUI.h 文件中,我有:
public:
algorithmObject Object1;
在我的 GUI.cpp 文件中,我正在尝试通过以下方式对其进行初始化:
Object1 = algorithmObject();
我正在使用MS VS 2010,我收到编译错误:
错误C1903:无法从先前的错误中恢复;停止编译 错误C2065:'Object1':未声明的标识符
如果我不包括:
Object1 = algorithmObject();
在我的GUI.cpp文件中,只是希望GUI构造函数为我创建对象,我得到同样的错误。
我想,我不是在某种程度上在.cpp文件中正确初始化我的对象。有人可以建议什么是正确的过程吗?
我的algorithmObject文件概述如下:
algorithmObject.h
#include <iostream>
#include <fstream>
class algorithmObject
{
public:
algorithmObject (void);
~algorithmObject (void);
void function1 (int parameter);
void function2 ();
}
algorithmObject.cpp
#include "algorithmObject.h"
algorithmObject::algorithmObject(void)
{
}
void algorithmObject::function1(int parameter)
{
//do something
}
void algorithmObject::function2()
{
//do something
}
algorithmObject::~algorithmObject(void)
{
}
但是,如果我不在GUI.h文件中包含任何定义,只需在GUI(algorithmObject Object1;)中的单个函数中定义我的algorithmObject,我就能正确访问我的类的功能。但问题是该对象是该函数的本地对象,我无法从GUI.cpp文件的任何其他函数访问它,这对我来说非常重要......
答案 0 :(得分:1)
您需要在algorithmObject.h
中包含gui.h
,因此当编译器看到尝试使用algorithmObject
的代码时,已经看到了{{1}的声明} class。
可能通过在尝试使用之前在源文件中始终包含 虽然这在很长一段时间内很多C都是相当标准的做法,但我(个人)认为它相当容易出错并且很脆弱,所以我一般更喜欢如果标题取决于其他标题,它包含它们本身,因此在将其包含在源文件中时没有先决条件。algorithmObject
来避免这种情况,因此您需要:< / p>
algorithmObject.h