2016-05-14 4 views
-1

Я хочу создать базовый класс и получить сообщение об ошибке с моим списком инициализаторов в конструкторе по умолчанию. Вот ошибки я получаю:Ожидаемый неквалифицированный идентификатор до ')' токена?

giasuc.cpp:3:8: error: expected unqualified-id before ')' token 
GiaSuc(): ten(""), soConSinh(0), soLitSua(0) { 
     ^
giasuc.cpp:6:14: error: expected ')' before '&' token 
GiaSuc(GiaSuc& mGiasuc): ten(mGiasuc.ten), soConSinh(mGiasuc.soConSinh), soLitS 
ua(mGiasuc.soLitSua) { 
      ^
giasuc.cpp:9:20: error: expected ')' before '&' token 
GiaSuc(std::string &mTen, short mSoCon = 0, short mLitSua = 0): ten(mTen), soCo 
nSinh(mSoCon), soLitSua(mLitSua) { 
        ^

И это класс я строю (giasuc.h):

#ifndef GIA_SUC_H 
#define GIA_SUC_H 

#include <iostream> 
#include <string> 

class GiaSuc { 
protected: 
    std::string ten; 
    short soConSinh; 
    short soLitSua; 

public: 
    GiaSuc(); 
    GiaSuc(GiaSuc& mGiasuc); 
    GiaSuc(std::string &mTen, short mSoCon, short mLitSua); 
    virtual void keu() = 0; 
    virtual ~GiaSuc() = 0; 
}; 

#endif // GIA_SUC_H 

И giasuc.cpp:

#include "giasuc.h" 
#include <string> 
GiaSuc(): ten(""), soConSinh(0), soLitSua(0) { 
} 

GiaSuc(GiaSuc& mGiasuc): ten(mGiasuc.ten), soConSinh(mGiasuc.soConSinh), soLitSua(mGiasuc.soLitSua) { 
} 

GiaSuc(std::string &mTen, short mSoCon = 0, short mLitSua = 0): ten(mTen), soConSinh(mSoCon), soLitSua(mLitSua) { 
} 

Я использую MinGW g ++ (GCC) 4.9.3 и скомпилировал его с помощью:

g++ -Wall -Wpedantic -Weffc++ -ansi -c giasuc.cpp

+2

Try включая ' '? –

+0

@JoachimPileborg Я только что попробовал и получил ту же ошибку. –

+0

не может воспроизводиться с помощью clang – vu1p3n0x

ответ

1

При определении функций-членов класса вне определения класса, вы должны использовать оператор :: области действия и имя класса, чтобы сообщить компилятору, какой класс они принадлежат.

Как

GiaSuc::GiaSuc(): ten(""), soConSinh(0), soLitSua(0) { ... } 
1

В вашем .cpp-файле конструктор не должен быть GiaSuc(). Это должно быть GiaSuc::GiaSuc(). Конструктор должен быть квалифицирован именем класса.

#include "giasuc.h" 
#include <string> 
GiaSuc::GiaSuc(): ten(""), soConSinh(0), soLitSua(0) { 
} 

GiaSuc::GiaSuc(GiaSuc& mGiasuc): ten(mGiasuc.ten), soConSinh(mGiasuc.soConSinh), soLitSua(mGiasuc.soLitSua) { 
} 

GiaSuc::GiaSuc(std::string &mTen, short mSoCon = 0, short mLitSua = 0): ten(mTen), soConSinh(mSoCon), soLitSua(mLitSua) { 
} 
0

Вы забыли оператор разрешения Scope, что требуется при определении ваших функций за пределами вашего класса #include "GiaSuc.h"

GiaSuc::GiaSuc(): ten(""), soConSinh(0), soLitSua(0) { 
} 

GiaSuc::GiaSuc(GiaSuc& mGiasuc): ten(mGiasuc.ten), soConSinh(mGiasuc.soConSinh), soLitSua(mGiasuc.soLitSua) { 
} 

GiaSuc::GiaSuc(std::string &mTen, short mSoCon = 0, short mLitSua = 0): ten(mTen), soConSinh(mSoCon), soLitSua(mLitSua) { 
} 

http://en.cppreference.com/w/cpp/language/lookup

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