我在向这个现有项目添加这个新类/ header 时遇到问题。该项目是在VS中,用C++编写的,并与QT集成。我不断收到“没有合适的默认构造函数可用”的错误,并且智能感知在构造函数的成员列表中突出显示 m_Test(new Proj::Foo) 并表示“不完整的类型是不允许。”
假设项目名称为 Proj,类名称为 Foo。
foo.h
#ifndef FOO_H
#define FOO_H
#include "custompanel.h"
class ParameterInterface;
class IsdbServiceInterface;
namespace Proj
{
class Foo;
}
class Foo : public CustomPanel
{
Q_OBJECT
public:
explicit Foo(QWidget *parent = 0);
~Foo();
private:
Proj::Foo* m_Test;
};
#endif
foo.c
#include "foo.h"
Foo::Foo(QWidget *parent) : CustomPanel(parent), m_Test(new Proj::Foo)
{
m_Test->setupUi(this);
}
Foo::~Foo()
{
delete m_Test;
}
我根据项目中的其他工作示例对此进行了建模,但我没有想到为什么我的示例会有所不同。有任何想法吗?我想知道我是否在这里遗漏了一些基本的东西。感谢您的浏览。
最佳答案
您的 Foo
类定义不在 Proj
命名空间中,但您的 m_test
变量正在使用 Proj::Foo
类。
实际上,您有两个类:Foo
和 Proj::Foo
,其中 Proj::Foo
没有定义,只是一个转发声明。
要修复此问题,请删除命名空间,或展开命名空间大括号以包含 Foo
定义。
关于c++ - 类构造函数: Incomplete type is not allowed (in member list) - VS C++ w/QT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150281/