变量的不完全类型-尽管我认为我已经正确地向前声明了
Incomplete Type For a Variable - Though I Thought I Had Forward Declared Correctly?
在尝试通过引用将此类传递到另一个类之前编译的代码。你可以忽略我使用QT的事实。
为了完整性,我添加了所有受影响的文件。
所以我觉得我已经掌握了远期申报的窍门。以下是我得到的错误,表明编译器对前向声明不满意:
error: field m_systemController has incomplete type
SystemController m_systemController;
你可以在底部看到它吓坏了的变量。cpp:
这是启动。h:
#pragma once
#include <QObject>
namespace GUI{
class SetupTab; //Should have my forward declarations in order
class CbcRegistersTab;
class DataTestTab;
class MainView;
class Settings;
class SystemController;
class DataTest;
class SetupTabViewManager;
class Startup : public QObject
{
Q_OBJECT
public:
explicit Startup();
void show() const ;
~Startup();
private:
SetupTab& m_setupTab;
CbcRegistersTab& m_regTab;
DataTestTab& m_dataTab;
MainView& m_mainView;
Settings* m_settings;
SystemController& m_systemController;
DataTest& m_dataTest;
SetupTabViewManager* m_setupTabVm;
explicit Startup(const Startup& rhs) = delete;
Startup& operator= (const Startup& rhs) = delete;
};
}
这是启动的开始。cpp:
#include "startup.h"
#include "View/setuptab.h"
#include "View/cbcregisterstab.h"
#include "View/datatesttab.h"
#include "View/mainview.h"
#include "Model/settings.h"
#include "Model/systemcontroller.h"
#include "Model/datatest.h"
#include "ViewMgr/setuptabviewmanager.h"
#include "provider.h"
namespace GUI
{
Startup::Startup() :
QObject(nullptr),
m_setupTab(*new SetupTab(nullptr)),
m_regTab(*new CbcRegistersTab(nullptr)),
m_dataTab(*new DataTestTab(nullptr)),
m_mainView(*new MainView(nullptr,
m_setupTab,
m_regTab,
m_dataTab)),
m_systemController(*new SystemController(nullptr,
Provider::getSettingsAsSingleton())),
m_dataTest(*new DataTest(nullptr,
m_systemController)), //so it's this part I'm having trouble with
m_setupTabVm(new SetupTabViewManager(this,
m_setupTab,
m_systemController,
Provider::getSettingsAsSingleton() ))
然后,我非常简单地将这个值传递到我的datatest.h中,并通过引用将其绑定到一个变量:
#pragma once
#include <QObject>
namespace GUI{
class SystemController;
class DataTest : public QObject
{
Q_OBJECT
public:
explicit DataTest(QObject *parent,
SystemController& sysCtrl);
void runTest();
private:
SystemController m_systemController;
explicit DataTest(const DataTest& rhs) = delete;
DataTest& operator= (const DataTest& rhs) = delete;
};
}
然后是datatest.cpp的顶部:
#include "datatest.h"
#include "Model/systemcontroller.h"
namespace GUI
{
DataTest::DataTest(QObject *parent,
SystemController& sysCtrl) :
QObject(parent),
m_systemController(sysCtrl) // FREAKS OUT HERE
{
}
在datatest.h
中,您有以下成员变量
SystemController m_systemController;
由于变量是实例,您需要一个完整的include,而不仅仅是一个正向声明。
只有在只有指针或引用(如)的情况下,才能使用正向声明
SystemController* m_pSystemController; // pointer
SystemController& m_rSystemController; // reference
您还可以使用带有前向包含的智能指针
std::unique_ptr<SystemController> m_pSystemController;
相关文章:
- 如何正确地将分支添加到已存在的树中
- 如何正确地将带有指针的数组传递给函数
- 如何正确地推回然后遍历堆中对象的向量?
- 我是否不正确地集中了这些字符数组?
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 我怎样才能通过友谊正确地履行我的职能?
- C++:如何正确地将 deque::front() 返回的变量从函数中传递出去?
- 我应该如何正确地将packaged_task移动到 lambda?
- 如何正确转发声明结构"using XXX"?
- 用于从 ANSI 字符串转换为 std::basic_string <TCHAR>的正确函数声明
- 如何正确地将SHA1CryptoServiceProvider转换为c ++?
- 如何正确地对 constexpr 函数进行单元测试
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 如何正确地将boost::asio::buffers_iterator转换为InputIterator
- 如何正确地检查变量char中包含的字母
- 当试图交换可变模板类时,如何正确地重载operator=
- 如何正确地将 boost::optional<std::chrono::d uration> 作为函数参数?
- 如何在C++中正确地将我的语言字符输出到HTML文件中
- 使用类成员正确地声明函数
- 如何正确地声明从非常量迭代器到指针的常量指针