2013-02-27 7 views
1

Я пытаюсь создать класс, который использует файл заголовка (.h) и файл источника (.cpp). Я наткнулся на эту ошибку, что я не могу решить:Ошибка при определении метода в исходном файле

Error: "Menu::Menu(int w, int h)" provides no initializer for:

Вот мой код:
Заголовок:

//Menu.h: 
#ifndef MENU_H 
#define MENU_H 

#include <StdAfx.h> 
#include <objidl.h> 
#include <gdiplus.h> 
#include <windows.h> 

using namespace Gdiplus; 
#pragma comment (lib,"Gdiplus.lib") 

class Menu 
{ 
public: 
    Menu(int w, int h); 
    void render(); 
    void checkInput(int x, int y, int message); 
    void setWidth(int w); 
    void setHeight(int h); 
    void setOpenWidth(int w); 
    void setOpenHeight(int h); 
    void setPosX(int x); 
    void setPosY(int y); 
    void setDraggablePaneColor(Color c); 
    void setContentPaneColor(Color c); 
    void setCornerButtonColorInactive(Color c); 
    void setCornerButtonColorActive(Color c); 
    void setTextColor(Color c); 
    void setBorderColor(Color c); 

private: 

    //Position variables: 

    //window position variables 
    int posX; 
    int posY; 

    //drag offset variables 
    int dragX; 
    int dragY; 


    //Width and height variables: 

    //width and height of draggable pane 
    int width; 
    int height; 

    //width and height of content pane 
    int widthOpen; 
    int heightOpen; 


    //States 

    //menu open states 
    bool menuOpen; 

    //corner button hover states 
    bool cornerButtonHover; 
    bool cornerButtonWasHovering; 

    //dragging state 
    bool dragging; 
    //left mouse button down state 
    bool lmbDown; 


    //Colors 

    //draggable pane color 
    Color draggablePaneColor; 
    //content pane color 
    Color contentPaneColor; 
    //inactive button color (not hovering) 
    Color cornerButtonColorInactive; 
    //active button color (hovering) 
    Color cornerButtonColorActive; 
    //text color 
    Color textColor; 
    //border color 
    Color borderColor; 


    //Constants 

    //corner button text 
    const wchar_t cornerButtonText[][3]; 
    //corner button length 
    const int cornerButtonLength; 


    //Content 

    //element content[]; 
}; 
#endif 

Источник:

//Menu.cpp 
#include "Menu.h" 

Menu::Menu(int w, int h) 
{ 

} 

int posX = 0; 
int posY = 0; 

//drag offset variables 
int dragX = 0; 
int dragY = 0; 


//Width and height variables: 

//width and height of draggable pane 
int width = 150; 
int height = 20; 

//width and height of content pane 
int widthOpen = 150; 
int heightOpen = 200; 


//States 

//menu open states 
bool menuOpen = true; 

//corner button hover states 
bool cornerButtonHover = false; 
bool cornerButtonWasHovering = false; 

//dragging state 
bool dragging = false; 
//left mouse button down state 
bool lmbDown = false; 


//Colors 

//draggable pane color 
Color draggablePaneColor = Color(60, 60, 60); 
//content pane color 
Color contentPaneColor = Color(80, 80, 80); 
//inactive button color (not hovering) 
Color cornerButtonColorInactive = Color(60, 60, 60); 
//active button color (hovering) 
Color cornerButtonColorActive = Color(70, 70, 70); 
//text color 
Color textColor = Color::White; 
//border color 
Color borderColor = Color::Black; 


//Constants 

//corner button text 
const wchar_t cornerButtonText[][3] = {L"+", L"-", L"X"}; 
//corner button length 
const int cornerButtonLength = height - 4; 


//Content 

//element content[]; 
void Menu() 
{ 

} 
+2

В «Меню» могут быть некоторые сложные переменные, которые необходимо инициализировать. Отправьте весь класс или, по крайней мере, на строку, на которую ссылается компилятор. –

+0

Я подозреваю, что у вашего кода, который вы опубликовали, отсутствует критическая ссылка, которую вы используете как часть «Меню», для чего вам нужен «инициализатор для». К сожалению, я думаю, что я могу говорить за всех нас, когда я говорю: «Мы не можем догадываться, что такое код, который вы не разместили ...». Пожалуйста, сделайте полный пример, который компилирует, что показывает проблему. –

+0

Я обновил сообщение, чтобы показать весь мой код. – user1803542

ответ

0

const члены должен быть явно инициализирован в конструкторе. Вероятно, вы думали, что уже делаете это, но это не так. Код:

Menu::Menu(int w, int h) 
{ 

} 

int posX = 0; 
int posY = 0; 
... 

определяет пустого конструктора, а затем определяет новые переменные в области видимости файла. posX создатель: int posX = 0; не имеет ничего общего с Menu::posX. Чтобы правильно инициализировать переменные-члены в конструкторе, вам необходимо использовать следующее:

Menu::Menu(int w, int h) 
{ 
    posX = 0; 
    posY = 0; 
    ... 
} 
+0

Так будет ли это работать? Меню: Меню (int w, int h) { \t const wchar_t cornerButtonText [] [3] = {L "+", L "-", L "X"}; \t const int angleButtonLength = height - 4; } ' – user1803542

+0

Нет, это определение новой переменной в объеме конструктора. – us2012

+0

что об этом? 'Меню :: Меню (int w, int h) { \t Меню :: cornerButtonText [] [3] = {L" + ", L" - ", L" X "}; \t Меню :: cornerButtonLength = height - 4; } ' – user1803542

Смежные вопросы