This topic has been deleted. Only users with topic management privileges can see it.
I have default mainwindow class: mainwindow.h and mainwindow.cpp. I also have my own class Sprite: sprite.h and sprite.cpp. I want to create the object of Sprite class in mainwindow.h but I’ve got an error : «‘Sprite’ does not name a type‘». I included header file «sprite.h« in mainwindow.h but problem is still there!
Here is my mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <SOME QT HEADERS>
#include "sprite.h"
namespace Game{
const double version = 0.01;
const int FPS = 60;
const int WIDTH = 800;
const int HEIGHT = 600;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QColor mainGameColor;
Sprite mainSprite;
void update();
void paintEvent(QPaintEvent *event);
};
…and sprite.h
#ifndef SPRITE_H
#define SPRITE_H
#include <QObject>
#include "mainwindow.h"
using namespace std;
class Sprite : public QObject
{
Q_OBJECT
public:
Sprite(QObject *parent = 0,string file = "default.bmp");
QImage getSprite();
signals:
public slots:
private:
QImage image;
int x;
int y;
};
#endif // SPRITE_H
I will be grateful for any advices!
You should remove inclusion of mainwindow.h from sprite.h: you have introduced a circular dependency:
- The compiler reads mainwindow and encounters sprite.h include
- It proceeds to sprite.h, but finds mainwindow.h include there
- It goes back to mainwindow.h, as instructed
- And you have a loop
[edit: changed explanation to numbered list SGaist]
Now my program work nice!Thank you for detailed ansewer:)
I’m glad to hear that. Happy coding
Thanks Sir
Works as charms! right reasoning was required, thanks.
@Samarth
Just as a note for this circular dependency as it can happen quite easy.
To resolve it often we use a class forward which is simply
class MyX;
and we don’t include its header ( MyX header goes to the .cpp instead )
then in other class in same file
class Other {
MyX * someX;
}
With the forward class, we are allowed to declare a pointer to that type (MyX) without compiler wanting to see the full header.
This only works for pointers and references as else it will want to see the full header as the compiler needs
to check other things when not a pointer.
time.h
Гость |
does not name a type при объявлении указателя на пользовательский класс А. |
||
|
time.h
Гость |
Не я конечно нуб,но все же этот вариант я сто раз проверил. |
||
|
kambala |
может код покажешь? |
||
Изучением C++ вымощена дорога в Qt. UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher |
time.h
Гость |
Да я думаю не стоит.Много классов.Много кода. |
||
|
LisandreL
Птица говорун Сообщений: 984 Надо улыбаться
|
Да я думаю не стоит.Много классов.Много кода. Типа угадайте телепатически что у меня не так? На той строке, где ошибка ctrl+click по названию класса — если никуда не перешли (или перешли, но нетуда), значит точно ошибка в этом. |
||
|
time.h
Гость |
Типа угадайте телепатически что у меня не так? Без телепатии неплохо справляешся. Проблема похоже заключается в том что название класса совпадает с названием одной из функций QObject. |
||
|
LisandreL
Птица говорун Сообщений: 984 Надо улыбаться
|
Проблема похоже заключается в том что название класса совпадает с названием одной из функций QObject. Могу посоветовать следовать правилам именования в Qt — имена классов с Большой буквы, а имена переменных и функций — с маленькой. |
||
|
- Forum
- Qt
- Qt Programming
- ‘Class’ does not name a type error
-
31st January 2011, 17:43
#1
‘Class’ does not name a type error
hi, its probably some silly mistake in c++ but my code is not working, it gives me error.
here is code
_time.h
#ifndef _TIME_H
#define _TIME_H
#include <QObject>
#include <QTimer>
{
Q_OBJECT
public:
_Time();
_Time(int sec=0,int min=0,int hour=0);
int hour;
int min;
int sec;
};
#endif // _TIME_H
To copy to clipboard, switch view to plain text mode
_time.cpp
#include "_time.h"
_Time::_Time()
{
hour=0;
min=0;
sec=0;
}
_Time::_Time(int s, int m, int h)
{
if (h > -1)
hour=h;
else
hour=0;
if ((m > -1) && (m<60))
min=m;
else
min=0;
if ((s > -1) && (s<60))
sec=s;
else
sec=0;
}
To copy to clipboard, switch view to plain text mode
main.cpp
#include "_time.h"
_Time t;
int main(int argc, char *argv[])
{
return 0;
}
To copy to clipboard, switch view to plain text mode
i get error:
_Time does not name a type.any suggestions? thanks in advance
Last edited by naturalpsychic; 31st January 2011 at 18:34.
Reason: code correction
Life is like a dream, sometimes it is good and somtimes it is bad, but in the end it is over
-
31st January 2011, 17:53
#2
Re: ‘Class’ does not name a type error
You are missing a semi colon at your class declaration.
-
31st January 2011, 18:04
#3
Re: ‘Class’ does not name a type error
thanks for reply but im sorry in actual code there is semi colon (forgot to put in forum)..
even with semi colon it does not workLife is like a dream, sometimes it is good and somtimes it is bad, but in the end it is over
-
1st February 2011, 00:32
#4
Re: ‘Class’ does not name a type error
naturalpsychic, I have a riddle for you.
Let us consider following code:
_Time t;
To copy to clipboard, switch view to plain text mode
Which one of those two constructors
1) _Time();
2) _Time(int sec=0,int min=0,int hour=0);
To copy to clipboard, switch view to plain text mode
should be called ?
Do you know the answer ?
-
1st February 2011, 03:28
#5
Re: ‘Class’ does not name a type error
This exactly what my compiler tells me too.
main.cpp:2: error: call of overloaded ‘_Time()’ is ambiguous
_time.h:12: note: candidates are: _Time::_Time(int, int, int)
_time.h:11: note: _Time::_Time()
main.cpp:3: warning: unused parameter ‘argc’
main.cpp:3: warning: unused parameter ‘argv’
make: *** [main.o] Error 1
To copy to clipboard, switch view to plain text mode
You do not need your no-arguments constructor.
The difference in error messages aside, from the 2003 C++ Standard:
17.4.3.2.1 Global names [lib.global.names]
Certain sets of names and function signatures are always reserved to the implementation:
* Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
* Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace. [165][165] Such names are also reserved in namespace ::std (17.4.3.1).
So _Time is a bad name.
Last edited by ChrisW67; 1st February 2011 at 03:37.
Reason: updated contents
-
1st February 2011, 15:58
#6
Re: ‘Class’ does not name a type error
thanks for reply
what i have done now is i changed my ‘_Time’ class name to ‘CMTime’, thanks for the reference,
also now i have gotten rid of one of constructor now i have got one constructor,
i still get this error (CMTime does not name a type)
and if i get rid of
#ifndef _TIME_H
#define _TIME_H
…
#end _TIME_H
macro definition i get error for multi declaration of class, i had made sure myself by re-writing class with same functions, but its still doing thatthanks in advance
Life is like a dream, sometimes it is good and somtimes it is bad, but in the end it is over
-
1st February 2011, 16:19
#7
Re: ‘Class’ does not name a type error
please send a minimal compilable example reproducing the error.
-
1st February 2011, 16:25
#8
Re: ‘Class’ does not name a type error
_time.h
#ifndef _TIME_H
#define _TIME_H
#include <QObject>
#include <QTimer>
class CMTime : public QObject
{
Q_OBJECT
public:
//CMTime();
CMTime(int sec=0,int min=0,int hour=0);
void startTicking();
int getHour();
int getMin();
int getSec();
int getTotalSeconds();
static QString getTime(int h,int m, int s);
private:
int hour;int min;int sec;
signals:
void secondPast(int h,int m,int s);
public slots:
void timeout();
};
#endif // _TIME_H
To copy to clipboard, switch view to plain text mode
_time.cpp
#include "_time.h"
/*CMTime::CMTime()
{
timer=new QTimer(this);
hour=0;
min=0;
sec=0;
QObject::connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
}*/
CMTime::CMTime(int s, int m, int h)
{
if (h > -1)
hour=h;
else
hour=0;
if ((m > -1) && (m<60))
min=m;
else
min=0;
if ((s > -1) && (s<60))
sec=s;
else
sec=0;
QObject::connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
}
int CMTime::getHour()
{
return hour;
}
int CMTime::getMin()
{
return min;
}
int CMTime::getSec()
{
return sec;
}
void CMTime::timeout()
{
emit secondPast(hour,min,sec);
if (sec++ == 59)
{
sec=0;
if (min++ == 59)
{
min=0;
hour++;
}
}
}
{
QString result=getTime(getHour(),getMin(),getSec());
sec=0;
hour=0;
min=0;
startTicking();
return result;
}
int CMTime::getTotalSeconds()
{
return (sec + (min * 60) + ((hour * 60) * 60));
}
QString CMTime::getTime(int h,int m,int s)
{
QString sStr;QString mStr;QString hStr;
s < 10 ? sStr="0"+QString::number(s):sStr=QString::number(s);
m < 10 ? mStr="0"+QString::number(m):mStr=QString::number(m);
h < 10 ? hStr="0"+QString::number(h):hStr=QString::number(h);
resultTime= hStr+ ":"+mStr+":"+sStr;
return resultTime;
}
void CMTime::startTicking()
{
timer->start(1000);
}
{
timer->stop();
return getTime(getHour(),getMin(),getSec());
}
To copy to clipboard, switch view to plain text mode
_process.h:
#ifndef PROCESS_H
#define PROCESS_H
#include <QThread>
#include "_time.h"
#include <QTreeWidget>
class CMProcess : public QThread
{
Q_OBJECT
public:
CMTime t;//<< here it gives error
};
#endif // PROCESS_H
To copy to clipboard, switch view to plain text mode
Life is like a dream, sometimes it is good and somtimes it is bad, but in the end it is over
-
1st February 2011, 16:42
#9
Re: ‘Class’ does not name a type error
natural…
I think you have an error, because I «make» your source code with the changes suggested, and it worked. Maybe you omit making one of the «CM» changes in the class declaration…?
Hope this helps.To late…
Last edited by arnaiz; 1st February 2011 at 16:47.
-
1st February 2011, 16:43
#10
Re: ‘Class’ does not name a type error
oh i solved it myself..just in case you guys wondering i changed header macro name to CMTIME_H
thanks anyways guys
Life is like a dream, sometimes it is good and somtimes it is bad, but in the end it is over
Similar Threads
-
Replies: 1
Last Post: 26th January 2011, 07:23
-
Replies: 12
Last Post: 28th May 2010, 01:07
-
Replies: 2
Last Post: 12th May 2010, 18:42
-
Replies: 3
Last Post: 27th December 2008, 20:34
-
Replies: 1
Last Post: 16th July 2008, 15:01
Tags for this Thread
Bookmarks
Bookmarks
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
- BB code is On
- Smilies are On
- [IMG] code is On
- [VIDEO] code is On
- HTML code is Off
Forum Rules
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.
Hi,
Trying to compile PgModeler on Win 7, QT 5.3.1 with MinGW 4.8.2. I got around most errors but wondering why getting this error:
In file included from src/databaseimportform.h:29:0,
from src/mainwindow.h:43,
from src/mainwindow.cpp:19:
src/databaseimporthelper.h:53:3: error: 'Catalog' does not name a type
Catalog catalog;
^
In file included from src/sqltoolwidget.h:32:0,
from src/mainwindow.h:44,
from src/mainwindow.cpp:19:
src/datamanipulationform.h:53:3: error: 'Catalog' does not name a type
Catalog catalog;
^
In file included from src/mainwindow.h:44:0,
from src/mainwindow.cpp:19:
src/sqltoolwidget.h:90:32: error: 'Catalog' has not been declared
static void fillResultsTable(Catalog &catalog, ResultSet &res, QTableWidget *results_tbw, bool store_data=false);
^
Makefile.Release:38274: recipe for target 'obj/mainwindow.o' failed
mingw32-make[2]: *** [obj/mainwindow.o] Error 1
mingw32-make[2]: Leaving directory 'c:/Temp/pgmodeler/pgmodeler-develop/libpgmodeler_ui'
Makefile:34: recipe for target 'release' failed
mingw32-make[1]: *** [release] Error 2
mingw32-make[1]: Leaving directory 'c:/Temp/pgmodeler/pgmodeler-develop/libpgmodeler_ui'
Makefile:262: recipe for target 'sub-libpgmodeler_ui-make_first-ordered' failed
mingw32-make: *** [sub-libpgmodeler_ui-make_first-ordered] Error 2
I see the same issue has been mentioned by @yangkwch in issue #463 and indeed, the solution that also works for me is to change the include path of catalog.h in databaseimporthelper.h (and as of 0.8.0 also in datamanipulationform.h) from
#include "catalog.h"
to
#include "../../libpgconnector/src/catalog.h"
.
Question: is there any reason why this fix was not put into the GitHub source repository? I don’t mind doing this change every time I compile but not sure why it has not been fixed…
Здравствуйте!
Решил сделать взаимодействие с графиком в отдельном файле, чтобы удобно было работать с кнопками и самим графиком, но столкнулся с такой проблемой, что при компиляции появляется ошибка does not name a type. Я поискал в гугле, что по этой проблеме говорят (например, https://stackoverflow.com/questions/2133250/x-does-not-name-a-type-error-in-c), понял, что нужно сместить свой класс, так чтобы он собирался раньше чем MainWindow, но я не понимаю, как это сделать, когда класс MainWindow основной, и при перестановке хедеров в mainwindow.h у меня появляется еще большее количество ошибок.
mianwindow.h
#include <QMainWindow> #include <QFont> #include <QVector> #include <QTimer> #include <QtMath> #include "oscilloscope.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void setData(const QVector< double > &keys, const QVector< double > &values); void replotGraph(); signals: private: Ui::MainWindow *ui; Oscilloscope *scope; };
oscilloscope.h
#include <mainwindow.h> #define SIZE_SAMPLE 5000 #define TIME_UPDATE 10 class Oscilloscope : public QMainWindow { Q_OBJECT public: Oscilloscope(QWidget *parent = nullptr); ~Oscilloscope(); void Updated(); void setNotifyInterval(int t); double gaussrand(double m, double sko); double sin(double f, double amp, int x); void setTimeUpdate(int time); private slots: void processing(); signals: void notify(); void setData(const QVector<double> &keys, const QVector<double> &values); void replotGraph(); void setColorPen(); void setStalyPen(); void setRandgeAxisX(); void setRandgeAxisY(); private: QTimer *timer; QVector<double> x, y; QVector<double> xSin, ySin; int timeUpdate; };
Цитата
Topic starter
Размещено : 12.02.2022 19:40
Проблема исчезла, когда я родителем у класса Oscilloscope сделал QObject. Правильно ли я понимаю, что сделав в качестве родителя самый базовый класс Qt, я гарантировал, что мой созданный класс будет собираться перед MainWindow?
ОтветитьЦитата
Topic starter
Размещено : 12.02.2022 20:59
@rodion-2 А можешь проблемный проект скинуть, с ошибкой?
ОтветитьЦитата
Размещено : 14.02.2022 09:37
@aveal Могу, но только вечером. Спасибо большое
ОтветитьЦитата
Topic starter
Размещено : 14.02.2022 12:19
11 ответов
Я нашел эту проблему на qtcreator 3.4.1 и QT 5.4, когда я заменил, например,
#include <QTextEdit>
с
class QTextEdit;
эта проблема исчезла.
changfeng
14 июнь 2015, в 12:10
Поделиться
У меня была эта проблема, и как Arckaroph сказали:
проблема заключается в том, что когда мы включаем заголовочный файл в файл исходного кода, и мы используем в нем директиву #ifndef, мы не можем включить его снова в заголовочный файл, чтобы указать тип включенных классов в переменную в источнике файл кода
пример:
class1.h содержит Class1
class2.h содержит Class2
class2 имеет приватную переменную V с классом 1
если мы включим class1.h в класс 2. CPP, мы не можем включить его в класс2.h, чтобы дать V тип class1.
поэтому мы помещаем class2.cpp class2.h перед class1.h
или мы удаляем class1.h из класса2.cpp
nabil
16 авг. 2011, в 12:02
Поделиться
В abc.cpp
убедитесь, что вы включили xyz.h
, прежде чем включать abc.h
.
Понятия не имею, почему замена этих двух сторон будет иметь значение, но это было для меня.
Steve
09 фев. 2011, в 19:10
Поделиться
Я считаю, что вы объявляете что-то типа XYZ, например
XYZ foo;
Проблема XYZ еще не определена.
Вот моя проблема и мой вывод. Как вы думаете?
Моя проблема в том, что у меня класс ABC и класс XYZ. Класс ABC имеет член, который объявлен как тип XYZ. Класс XYZ имеет член, который объявлен как тип ABC. Компилятор не знает, что такое XYZ-тип, потому что он еще не определил его. Поэтому указанная ошибка: «XYZ» не называет тип.
Пример кода:
class ABC{
private:
XYZ *xyz; //XYZ is not defined yet
};
class XYZ{
private:
ABC *abc; //ABC is defined above
};
Arckaroph
06 нояб. 2010, в 04:56
Поделиться
Получаете ли вы ошибку из компилятора или IDE (как подчеркнуто подчеркивание)? Я столкнулся с этим в Qt Creator 1.2.9, и я думаю, что это ошибка в среде IDE.
rpg
15 сен. 2009, в 15:22
Поделиться
в недавнем проекте QT, где я только что установил последний QT (3/2011), я вылечил три из них, которые останавливали мою сборку, добавив это…
#include <sys/types.h>
… до включения файла заголовка, который выдавал ошибки. Так оно и было.
Я не знаю, почему они распространяли бы что-то, что имело бы такие проблемы, возможно, в других типах систем. В любом случае он включен в нечто другое, но не в моем случае. Надежда, которая помогает кому-то.
fyngyrz
31 март 2011, в 05:49
Поделиться
Я нашел решение для себя.
Скажем, у меня есть класс А и класс Б.
«A.h» включает «B.h» и имеет экземпляр B как участника.
«B.h» включает «A.h» и имеет экземпляр члена A.
Компилятор дает мне ошибку в «B.h» в строке кода, где объявлен член класса A:
"A doesn't name type"
Что я делаю в «A.h» , я удаляю #include «B.h» и помещаю #include «B.h» в «A.cpp». И перед объявлением класса я пишу класс B;
...
// #include "B.h"
class B;
class A
{
...
B m_b;
};
...
Работал для меня, удачи!
Vadixem
15 фев. 2018, в 17:52
Поделиться
В моем случае я не использовал пространство имен, в котором был определен класс. Содержимое заголовка содержалось в пространстве имен, но в исходном файле отсутствовала директива using namespace
.
.h
:
namespace mynamespace {
class MyClass : public QWidget
{
...
}
}
.cpp
:
using namespace mynamespace
MyClass::MyClass(QWidget *parent) : QWidget(parent)
{
}
NuclearPeon
18 июль 2016, в 01:21
Поделиться
Мне приходят две возможности:
1. Возможно, у вас есть SLOT вместо SIGNAL при вызове connect().
2. Иногда это помогает сделать бесплатное редактирование файла .PRO(например, вставить и удалить пробел), чтобы QMake запускался и файлы .moc генерировались.
TonyK
09 фев. 2011, в 19:58
Поделиться
Помогает ли # включить соответствующий заголовочный файл?
Dirk Eddelbuettel
14 сен. 2009, в 15:38
Поделиться
Если вы используете шаблоны, вам нужно предшествовать имени класса с «typename», чтобы компилятор мог распознать его как тип…
template <typename t> //...
aviraldg
14 сен. 2009, в 14:23
Поделиться
Ещё вопросы
- 1Одиночная JSP с другим классом действия
- 1Как хранить ключ шифрования .NET
- 0Paypal вернуть динамическую ссылку?
- 1Вне контроля ListView
- 0Javascript — передача параметра в функцию, которая вызывает другую функцию
- 1Уровень доступа к базе данных ASP.NET MVC
- 0Есть ли способы повторно использовать подзапрос в синтаксисе SELECT FROM (запрос) в части JOIN?
- 1Как утверждать, что путь выполнения не выполняется более одного раза в Java?
- 0Сбой перегруженной функции оператора
- 1WELD-001318 Не удается разрешить неоднозначную зависимость между. , , в GlassFish 4
- 0Как связать php и MS SQL в LAMP
- 1Несоответствие количества транзакций с многоуровневыми транзакциями
- 1Java: Как добавить несколько внешних библиотек в makefile?
- 0OpenCV VideoCapture :: set () возвращает false, но успешно
- 1Изменить шаблон панели приложения и селектора длинных списков из Viewmodel
- 0Как сохранить значение переменной Python в Telegram в локальной базе данных?
- 1Подключение приложения Android к HTTP-серверу
- 0отключить выбор значения после выбора значения из одного тега выбора
- 0MySQL сервер ушел на ОБНОВЛЕНИЕ (Огромный QUERY, около 85 МБ), используя mysli PHP
- 0Тип элемента, хранящегося в матовой структуре OpenCV
- 0Ошибка установки Magento 2: класс «Magento Framework Autoload AutoloaderRegistry» не найден
- 0Проверьте, генерируется ли сообщение журнала, используя Boost.Log
- 0Как использовать Zend Pagination
- 1Создание пользовательской аннотации с использованием Spring, который поддерживает гибкую подпись метода
- 1связь между закрытым ключом и подписанным сертификатом в хранилище ключей
- 0AngularJS — двойные фигурные скобки, вызывающие синтаксическую ошибку
- 1Проблема с использованием Runnable + Handler.postDelayed для растровой анимации маркера
- 1Найти первый пустой слот в массиве объектов
- 0Angularjs выбирает «поддельную» модель обновления
- 0Как установить идентификатор и имя с автозаполнением
- 0Как заставить скрытый элемент скользить вниз, не затрагивая другие элементы в той же строке
- 1Загрузить файлы из динамического просмотра
- 0AngularJS: Как установить активный класс для элемента списка при нажатии? Тернарный метод
- 0Ежемесячный повтор с PHP
- 0Как выполнить многобайтовый безопасный запрос SQL REGEXP?
- 0Выберите элемент с помощью getElementsByTagName
- 1Панды для Loop Optimization
- 0черное цветное устройство iphone мигает в моем приложении jqery для мобильных телефонов
- 0Вызов функции из сервисного органа AngularJS
- 1Измените размер изображения так, чтобы оно соответствовало сетке JPanel
- 0IE условные комментарии ‘и’?
- 0Как я могу получить свой Angular $ http запрос на возврат ответа? Я пробовал функции обратного вызова и обещания
- 0функции isupper (), islower (), toupper (), tolower () не работают в c ++
- 1android OAuth вопрос, как отправить запрос на запрос токена
- 1Измените чувствительность масштабирования в ткани.js
- 0PDO Подготовленные заявления и логические значения
- 0Как отобразить новое изображение / окно при переходе на другое изображение / ссылку
- 1Vue.js добавляет класс при обновлении вычисленного значения
- 0Программа «Бродкаст»
- 1Извлечение данных из дерева
Fix «does not name a type» without forward declaration
Pages: 12
I’ve got a base class, and five classes that inherit from it using public BaseClass
. In each derived class’s header, I #include baseclass.h
.
In a different header file, I #include
all five of these classes (but not the base class), and declare a pointer to one of each. The problem is, I only get the
'class' does not name a type
error for one of these classes. I’m positive I spelled it right, so that’s not the problem. I also tried forward declaration (which gave me more errors). What could the problem be?
Last edited on
Do you have header guards in your headers?
If you don’t, and don’t know what they are, just put
#pragma once
at the beginning of all of your header files.
I do have header guards.
I’ve also tried declaring the pointer this way:
BaseClass* instance;
thinking that polymorphism compiles. Then g++ decides that the inheriting class is an int*
, which it is most definitely not.
Last edited on
Cna you please show the header for problem file.
|
|
|
|
|
|
|
|
Last edited on
Why are you defining the class Class in both main.h and class.h?
Check your header guards, if there is two same header guards, it will prevent your second class from including.
And I hope that your class in main does not have the same name as problem class like you showed.
Peter: That was a mistake; I’ve corrected it now.
The five inheriting classes each have their own header guard (i.e., class1, class2, etc.). I’ve made sure of this.
Last edited on
If you inherit from QObject, shouldn’t you use the Q_OBJECT macro to get the moc behave?
Yes, I do use that macro. I just didn’t find it relevant to the error I’m experiencing.
It’s impossible to know what the problem is without seeing real code.
It’s for an assignment, and I am not allowed to publicly post said real code. Could you private message me your email address?
Last edited on
A great read, thanks for the link.
Since my main.h only uses a pointer, I went ahead and forward declared the class (whose parent is BaseClass, and thus includes baseclass.h) in main.h. This does not resolve the error.
Last edited on
Start by stripping out all unnecesary things (actual uses of classes, make function definition empty, remove inheritance of QTobject) while checking if problem persist. Then rename all classes, check problem again and post it. That way we will see your problem and you will not show any actual code.
It took longer than I expected to whittle the code down.
@ne555, L B: I know for the sake of legibility, it’s bad practice to have multiple classes/methods/members/etc with the same name (especially main) — and I do NOT do this in my program (or any of them) — but is there anything stopping me from creating a class Main?
@trojansdestroy: There is nothing wrong with a class named Main, in this case it is a design pattern in C++
I was linking @ne555 to an example of the design pattern being used in one of my other projects.
Last edited on
Pages: 12