- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用以下代码时遇到问题,我不明白为什么编译器无法识别不同的类型,即使我在类 Core 的声明之前定义了它们。另外,我看不到无限包含循环的可能性。
代码如下:
#ifndef CORE_H
#define CORE_H
#define STAGING
//core
class SqlSaver;
class Indexer;
#include <QLayout>
#include <QMainWindow>
#include <QSplitter>
#include <QStatusBar>
#include <QSystemTrayIcon>
//macros
#include "preprocess.h"
//Interfaces
class PlayListInterface;
class SearchLineInterface;
class MetaDataInterface;
class DriveInterface;
class PlayingInterface;
class ProgressInterface;
class Updater;
class DailySongInterface;
class SystemTrayIcon;
class Playbox;
class EditInterface;
class Core : public QObject
{
Q_OBJECT
public:
Core(QMainWindow*);
QWidget *initInterfaces();
MetaDataInterface *metadatainterface();
//DriveInterface *driveinterface();
PlayListInterface *playlistinterface();
SearchLineInterface *searchlineinterface();
PlayingInterface *playinginterface();
ProgressInterface *progressinterface();
Playbox *playbox();
SystemTrayIcon *systemtrayicon();
Updater *updater();
SqlSaver* getSqlControl();
EditInterface* editinterface();
void place(float coef);
void afterLaunch();
QString getFileContent(const QString& path);
void setStatus(const QString&);
QStatusBar* bar();
void scanFolders();
QMainWindow* getParent();
QStringList dictionnary();
InterfaceName interface() const;
public slots:
void swapInterface(InterfaceName);
private:
QWidget *m_central;
QMainWindow *m_parent;
QStatusBar* m_bar;
QStringList m_dictionnary;
SystemTrayIcon *m_tray;
SqlSaver *sqlControl;
PlayListInterface *m_playlistinterface;
SearchLineInterface *m_searchlineinterface;
//DriveInterface *m_driveinterface;
MetaDataInterface *m_metadatainterface;
PlayingInterface *m_playinginterface;
ProgressInterface *m_progressinterface;
// Updater *m_updater;
BoutonRevenir *m_boutonrevenir;
Playbox *m_playbox;
EditInterface *m_editinterface;
InterfaceName m_interface;
};
#endif
还有编译器输出:
make: Entering directory `/Users/adriencanterot/Projects/compilation'
g++ <...> ../src/mainwindow.cpp
In file included from ../src/mainwindow.cpp:5:
../src/core.h:43: error: ISO C++ forbids declaration of 'MetaDataInterface' with no type
../src/core.h:43: error: expected ';' before '*' token
../src/core.h:47: error: ISO C++ forbids declaration of 'PlayingInterface' with no type
../src/core.h:47: error: expected ';' before '*' token
../src/core.h:48: error: ISO C++ forbids declaration of 'ProgressInterface' with no type
../src/core.h:48: error: expected ';' before '*' token
../src/core.h:49: error: ISO C++ forbids declaration of 'Playbox' with no type
../src/core.h:49: error: expected ';' before '*' token
../src/core.h:82: error: ISO C++ forbids declaration of 'MetaDataInterface' with no type
../src/core.h:82: error: expected ';' before '*' token
../src/core.h:83: error: ISO C++ forbids declaration of 'PlayingInterface' with no type
../src/core.h:83: error: expected ';' before '*' token
../src/core.h:84: error: ISO C++ forbids declaration of 'ProgressInterface' with no type
../src/core.h:84: error: expected ';' before '*' token
../src/core.h:86: error: ISO C++ forbids declaration of 'BoutonRevenir' with no type
../src/core.h:86: error: expected ';' before '*' token
../src/core.h:87: error: ISO C++ forbids declaration of 'Playbox' with no type
../src/core.h:87: error: expected ';' before '*' token
../src/mainwindow.cpp: In constructor 'MainWindow::MainWindow(QWidget*)':
../src/mainwindow.cpp:25: error: 'class Core' has no member named 'metadatainterface'
make: *** [obj/mainwindow.o] Error 1
make: Leaving directory `/Users/adriencanterot/Projects/compilation'
这是 preprocess.h :
#ifndef PREPROCESS_H
#define PREPROCESS_H
#include <QDebug>
#include <QFile>
#define REQUETE(q) QSqlQuery requete; if(!requete.exec(q)) { qDebug() << requete.lastError() << " | Q = " << requete.lastQuery(); }
#define QUERY(q) if(!query.exec(q)) { qDebug() << query.lastError() << " | \n\nQ = " << query.lastQuery() << "\n\n"; }
#define NB_CHAMPS_DATABASE 14
#ifdef Q_WS_WIN
#define FORMATS_SUPPORTES "*.mp3" << "*.wma" << "*.ogg";
#else
#define FORMATS_SUPPORTES "*.mp3" << "*.m4a" << "*.wma" << "*.ogg";
#endif
#define D(bug) qDebug() << bug;
#define WIDTH_LEFT 200
#define CHAR_NUM_LIST 50
#define RUNNING_WORDS QString("the ");
#define MAX_ELEMENT_SHOWN 500
#ifdef Q_OS_WIN
#define FMOD
#else
#define VLC
#endif
enum ContentType {
Dir, Playlist, Entire, Playbox, Empty
};
enum ContentTypeForLabel {
Label, LineEdit, clickableLabel
};
enum InterfaceName {
PlayingInterface, MetaDataInterface, ProgressInterface
};
enum Action {
Repeat, Random, Normal
};
enum progressionStyle {
progression, searching
};
enum insertError {
AlreadyExists, CantDecodeTag, SqlError, NoError
};
struct ProgressionInfo {
int progression;
int maximum;
QString phrase;
progressionStyle style;
};
enum searchResultType {
Song = 0, Artist =1, Album = 2, Nothing = 3
};
enum State{
Playing, Paused, Stopped
};
enum Provenance {
fromPlaybox, fromPlaylist, fromWeb, fromNowhere
};
#endif // PREPROCESS_H
最佳答案
您对 enum
值和 class
名称使用相同的标识符。他们发生冲突。
例如,
enum InterfaceName {
PlayingInterface, MetaDataInterface, ProgressInterface
};
和
class MetaDataInterface;
此处 enum
值 MetaDataInterface
与 class MetaDataInterface
冲突。
如果你想保存命名,但防止冲突,你可以用相同名称的命名空间包装每个枚举,例如:
namespace InterfaceName {
enum InterfaceName {
PlayingInterface, MetaDataInterface, ProgressInterface
};
};
class MetaDataInterface;
现在你可以引用类
了
MetaDataInterface* i = getInterfaceFromSomeWhere();
并像枚举
一样
InterfaceName::InterfaceName name = InterfaceName::MetaDataInterface;
或者,如果你可以使用c++11
,你可以使用class enum
:
enum class InterfaceName {
PlayingInterface, MetaDataInterface, ProgressInterface
};
class MetaDataInterface;
//....
MetaDataInterface* i = getInterfaceFromSomeWhere();
InterfaceName name = InterfaceName::MetaDataInterface; //note syntax difference here!
关于c++ - 错误 : ISO C++ forbids declaration of 'object' with no type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452329/
name: NSInternalInconsistencyException reason: forbid application start callStackSymbols:( 0 C
我使用 Jersey 作为我的 REST API。我使用 JSP 文件作为 View 。我将 JSP View 文件放在 www/views/... 中。现在,我想禁止通过规范 URL 上的简单 HT
我有一个带有 jQuery 验证和 System.ComponentModel.DataAnnotations 的 MVC 表单 问题是如果我在密码文本框中输入 & 然后 jQuery 和 MVC
情况:我从 PageModel 返回 Forbid() 并且这会启动响应并重定向 (302) 到 /AccessDenied&returnUrl=... 这里我指定路径: // configurat
在我的项目中我有这样一个函数: fun doCoolStuff(arg1: Int = 0, arg2: String? = null) { } 我希望它在以下情况下使用它: obj.doCoolSt
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有 3 个页面的 UIScrollView。我很难解释我的问题,这就是为什么我会尝试通过与 TableView 进行比较来解释它。 当您有表格 View 时,您可以滚动查看不存在的空间。我的意思是,
以下代码只是我的头文件的一部分 double calculateDistance(const wp, &CWaypoint); void print(int format);
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我知道我不应该在 C90 中这样做,这是一个相当基本的东西。 char name[strlen(s)]; ArrayLength.c:11: warning: ISO C90 forbids vari
我安装了最新的 NUnit(3.2.0),并且所有测试都并行运行。它可能看起来像是理想的行为,但我并没有要求它,实际上它破坏了我的一些测试。我在 [OneTimeSetUp] 中进行了一些依赖于线程的
我收到以下错误: ISO C++ forbids declaration of ttTreeInsert with no type ISO C++ forbids declaration of ttT
正如文件所述here array and object can be replaced with arrayOf and shape, respectively. 所以,我在我的项目中这样做了: cl
以下是我的代码: #include #include int main() { int *x= new int[10] (0,1,2,3,4,5,6,7,8,9);//error observed h
我有下面的代码,结构声明在main之前,函数声明也是 struct stuff{ int sale_per_day[Kdays]; int max_sale;
我是编程新手,刚刚读完 Dan Gookin 的《C for Dummies》。但我想我正在尝试制作小程序来感受一下这门语言。 我了解到 C 中有一个随机计数器(不是那么随机),显然使用计算机内部时钟
这种合并排序用法有什么问题吗? 我正在尝试对 main() 中给出的大小为 9 的数组进行排序。 但是,我使用 merge_sort 方法,它给了我错误:每个函数的“ISO C 禁止嵌套函数”。 当我
我在自学C++,遇到了这个问题。写了几行简单的代码就是想测试“auto”,现在好像不行了。我在下面粘贴了我的代码: #include using namespace std; int main(in
我有一个 C++ 程序,其中常量存储在一个类中。在代码的其他地方,我使用这些常量之一作为数组大小。 这是一个示例: 常量.h #ifndef CONSTANTS_H #define CONSTANTS
我在使用以下代码时遇到问题,我不明白为什么编译器无法识别不同的类型,即使我在类 Core 的声明之前定义了它们。另外,我看不到无限包含循环的可能性。 代码如下: #ifndef CORE_H #def
我是一名优秀的程序员,十分优秀!