C++ 与#有关的问题包括
我想我可以用一次pragma来解决我的问题,但它不起作用 这是我的问题 我有一个Agui.h,我想成为我的主标题,包括: 就是这样:C++ 与#有关的问题包括,c++,include,C++,Include,我想我可以用一次pragma来解决我的问题,但它不起作用 这是我的问题 我有一个Agui.h,我想成为我的主标题,包括: 就是这样: #pragma once /* This header includes all the required headers required for Agui Author: Josh */ //Standard library (STL) #include <stdlib.h> #include <ios
#pragma once
/*
This header includes all the required headers
required for Agui
Author: Josh
*/
//Standard library (STL)
#include <stdlib.h>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <list>
#include <algorithm>
#include <queue>
//C runtime
#include <cmath>
#include <ctime>
//Allegro 5
#include <allegro5/allegro.h>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include "AguiBaseTypes.h"
#include "AguiWidgetBase.h"
还有一个问题,AguiWidgetBase.h
#pragma once
#include "Agui.h"
/*
This is the base class for all widgets
Author: Josh
*/
class AguiWidgetBase
{
//variables
AguiColor tintColor;
AguiColor fontColor;
//private methods
void zeroMemory();
virtual void onPaint();
virtual void onTintColorChanged(AguiColor color);
void (*onPaintCallback)(AguiRectangle clientRect);
void (*onTintColorChangedCallback)();
public:
AguiWidgetBase(void);
~AguiWidgetBase(void);
void paint();
void setTintColor(AguiColor color);
AguiColor getBackColor();
};
编译器没有看到AguiWidgetBase的AguiBaseTypes。这导致
Warning 13 warning C4183: 'getBackColor': missing return type; assumed to be a member function returning 'int' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 11 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 12 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 1 error C2146: syntax error : missing ';' before identifier 'tintColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 10 error C2146: syntax error : missing ';' before identifier 'getBackColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 4 error C2146: syntax error : missing ';' before identifier 'fontColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 8 error C2061: syntax error : identifier 'AguiRectangle' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 20
Error 7 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 19
Error 9 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 28
我如何解决这个问题?还有没有一种方法可以像我所希望的那样,在任何地方都包含Agui.h,而不是随着时间的推移会变得混乱的单个包含
谢谢(为米洛精心制作)
您已经有了互斥或循环包含,您需要打破这些循环,否则您将永远无法编译代码
我可以从AguiWidgetBase.h中看到,它引用了AguiBaseTypes.h中的AguiColor,但这两个标题都试图包含Agui.h,而Agui.h本身则试图包含其他两个标题
您应该重新组织标题,使其仅包含所需的标题
您应该有一个分层系统,以便:
AguiWidgetBase.h应包括:
- AguiBaseTypes.h
- AguiBaseTypes.h
\pragma-once
不保证在所有编译器上都受支持,请改用include-guard。此外,还有循环包含:“Agui.h”包含“AguiBaseTypes.h”,反之亦然。这不是我们想要的
全局include文件可以减少源文件中的样板代码,但在头文件中,您应该准确地包含必要的头文件,否则您会遇到您描述的问题。#pragma一旦不能保证所有编译器都支持
,请改用include-guard。此外,还有循环包含:“Agui.h”包含“AguiBaseTypes.h”,反之亦然。这不是我们想要的
全局包含文件可以减少源文件中的样板代码,但在头文件中,您应该准确地包含必要的头文件,否则您会遇到您描述的问题。导致错误的.cpp文件的包含顺序是什么?您还可以使用user/showIncludes查看包含树,并确定头文件被拉入的顺序…回滚到原始版本以查看头文件中的依赖项。导致错误的.cpp文件的包含顺序是什么?您还可以使用user/showIncludes查看包含树,并计算出头文件的拉入顺序…回滚到原始版本以查看头文件中的依赖项。我不确定我是否完全理解,您能否详细说明一下?您不理解哪些部分?我不确定我是否完全理解,你能详细说明一下吗?哪些部分你不懂?#pragma在大多数编译器上都很好。它们在VisualStudio、GCC、CLang和我使用的控制台编译器上得到了正确的支持。虽然AndiDog说它们不一定会得到支持是正确的,但实际上,它们在所有流行的现代编译器上都是正确的。它们在VisualStudio、GCC、CLang和我使用的控制台编译器上得到了正确的支持。虽然AndiDog说它们不能保证得到支持是正确的,但实际上它们在所有流行的现代编译器上都得到了支持。
Warning 13 warning C4183: 'getBackColor': missing return type; assumed to be a member function returning 'int' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 11 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 12 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 1 error C2146: syntax error : missing ';' before identifier 'tintColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 14
Error 10 error C2146: syntax error : missing ';' before identifier 'getBackColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 29
Error 4 error C2146: syntax error : missing ';' before identifier 'fontColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 15
Error 8 error C2061: syntax error : identifier 'AguiRectangle' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 20
Error 7 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 19
Error 9 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 28