2010-10-07 89 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)可以阻止您的包含。

一個答案可以是前向聲明...指向類的指針,但不是類成員雖然(需要知道編譯時的存儲大小)。