gpt4 book ai didi

c - 我见过的最奇怪的错误,又名)*

转载 作者:太空狗 更新时间:2023-10-29 15:31:02 32 4
gpt4 key购买 nike

我正在编写这个很棒的应用程序,至少我认为它很棒,在 C 中与 GObject 的完美结合,过了一段时间我开始遇到这个非常非常奇怪的错误。我也相信已经注意到它并不总是出现。然而,这可能只是 IDE 的错误。无论如何...

显然,GCC 提示:expected ')' before '*' token;这发生在头文件中。

这是完全相同的头文件。

#pragma once
#include "global.h"

#include "CharcoalApp.h"

GtkListStore *WebsitesListStore;

// that error is reported for this line
void charcoal_websites_list_initialize(CharcoalApp *app);

据我所知,这来自该函数的 CharcoalApp *app 参数。

因为我不能真正理解为什么会发生此错误,所以我将包含 CharcoalApp.h 文件。 global.h是一个非常简单的头文件,里面承载了主要的依赖,主要有GLib、GObject、GThread、GTK+、WebKit等。

CharcoalApp.h


#ifndef __CHARCOAL_APP_H__
#define __CHARCOAL_APP_H__

#include "global.h"
#include "CharcoalDB.h"

#include "CharcoalWindow.h"
#include "CharcoalWebsitesList.h"

G_BEGIN_DECLS

#define CHARCOAL_TYPE_APP (charcoal_app_get_type())
#define CHARCOAL_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CHARCOAL_TYPE_APP, CharcoalApp))
#define CHARCOAL_APP_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CHARCOAL_TYPE_APP, CharcoalApp const))
#define CHARCOAL_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CHARCOAL_TYPE_APP, CharcoalAppClass))
#define CHARCOAL_IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CHARCOAL_TYPE_APP))
#define CHARCOAL_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CHARCOAL_TYPE_APP))
#define CHARCOAL_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CHARCOAL_TYPE_APP, CharcoalAppClass))

typedef struct _CharcoalApp CharcoalApp;
typedef struct _CharcoalAppClass CharcoalAppClass;
typedef struct _CharcoalAppPrivate CharcoalAppPrivate;

struct _CharcoalApp {
GObject parent;

CharcoalAppPrivate *priv;

GtkBuilder *ui;
CharcoalDB *db;

// toplevels
GtkWidget *CharcoalWindow;
};

struct _CharcoalAppClass {
GObjectClass parent_class;
};

GType charcoal_app_get_type(void) G_GNUC_CONST;
CharcoalApp *charcoal_app_new(void);
void charcoal_app_quit(CharcoalApp *app);

G_END_DECLS

#endif /* __CHARCOAL_APP_H__ */

感谢您的帮助!

最佳答案

CharcoalApp 未在 global.h 中声明。假设您在 C 文件中包含 CharcoalApp.h:

  1. CharcoalApp.h 被读取到 #include "global.h"
  2. global.h 包含在内
  3. 错误:“*”标记前应为“)”

您应该正确地重新排列头文件或使用 forward declaration (虽然我认为在这种情况下不需要)。


有很多解决方案:

  1. 正确的方法:从 global.h 中包含 CharcoalApp.h,而不是相反;
  2. typedef struct _CharcoalApp CharcoalApp; 移到 CharcoalApp.h 中的`#include "global.h"之前;
  3. CharcoalApp.h 中删除 #include "global.h" 并以正确的顺序包含它们(global.h 最后)。

关于c - 我见过的最奇怪的错误,又名)*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2038911/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com