2010-10-07 84 views
0

编译器给我说说下面的类以下的投诉:类实例变量内部类的原因编译器错误

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(); 
}; 


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 26 
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 11 
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 11 
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 12 
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 12 
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 26 
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 26 
Error 1 error C2146: syntax error : missing ';' before identifier 'tintColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 11 
Error 10 error C2146: syntax error : missing ';' before identifier 'getBackColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 26 
Error 4 error C2146: syntax error : missing ';' before identifier 'fontColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 12 
Error 8 error C2061: syntax error : identifier 'AguiRectangle' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 17 
Error 7 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 16 
Error 9 error C2061: syntax error : identifier 'AguiColor' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h 25 

这应该是工作,我包括头这些类。

这是.h文件:

//integer Point class 
class AguiPoint { 
    int x; 
    int y; 
public: 
    int getX(); 
    int getY(); 
    void setX(int x); 
    void setY(int y); 
    void set(int x, int y); 
    AguiPoint(int x, int y); 
    AguiPoint(); 
    std::string toString(); 
    std::string xToString(); 
    std::string yToString(); 

}; 

//floating version of Agui Point 
class AguiPointf { 
    float x; 
    float y; 
public: 
    float getX(); 
    float getY(); 
    void setX(float x); 
    void setY(float y); 
    void set(float x, float y); 
    AguiPointf(float x, float y); 
    AguiPointf(AguiPoint p); 
    AguiPointf(); 
    std::string toString(); 
    std::string xToString(); 
    std::string yToString(); 
}; 

//Integer rectangle class 
class AguiRectangle { 
    int x; 
    int y; 
    int width; 
    int height; 
public: 

    bool isEmpty(); 
    int getTop(); 
    int getLeft(); 
    int getBottom(); 
    int getRight(); 
    AguiPoint getTopLeft(); 
    AguiPoint getBottomRight(); 
}; 

class AguiColor { 
    unsigned char r; 
    unsigned char g; 
    unsigned char b; 
    unsigned char a; 
void verifyColorBounds(); 
public: 
    AguiColor(int r, int g, int b, int a); 
    AguiColor(float r, float g, float b, float a); 
    AguiColor(); 
    int getR(); 
    int getG(); 
    int getB(); 
    int getA(); 
}; 

感谢

我包括在WidgetBase和主标题主标题包括基本类型,它包括了widgetbase

+0

您是否包含AguiColor的正确头文件? – 2010-10-07 11:34:12

回答

0

看来你并没有在正确的顺序包括标题。

C++对声明标识符的顺序非常敏感。编译器将按顺序处理一个源文件(以及它沿途发现的任何#include -s),并且对于每个(非内置)标识符,编译器必须先看到一个声明,然后才能使用它。

0

之前,如果你已经包含头文件我猜你需要完全限定名称,因为名称空间或Aguiwidgitbase位于错误的名称空间中?无论哪种方式检查您包含的标题中的命名空间

0

检查头文件和命名空间。您可能还需要转发声明。

0

您可能会遇到包含依赖关系的问题。防止多重定义的标题防护(#pragma once,或#ifndef HEADER #define HEADER)可以阻止您的包含。

一个答案可以是前向声明...指向类的指针,但不是类成员虽然(需要知道编译时的存储大小)。