0
我有一個名爲Song的內部類創建器。以下是Song.h文件。請忽略評論。C++內部類無法編譯
#ifndef SONG_H
#define SONG_H
#include <iostream>
class Song
{
public:
class Creator{
public:
//Creator& name(const std::string name){};
void name(const std::string name){};
//std::string getName(){};
};
private:
std::string mName;
};
#endif // SONG_H
,這裏是Song.cpp類
#include "Song.h"
using std::string;
//using Song::Creator;
//Song::Creator& Song::Creator::name(const string name)
void Song::Creator::name(const string name)
{
mName=name;
std::cout<<name;
//return *this;
}
//string Creator::getName()
//{
//return mName;
//}
和主類
#include <iostream>
#include "Song.h"
int main()
{
Song::Creator sc;
sc.name("vickey");
//std::cout<<sc.getName();
return 0;
}
在編譯時,它拋出
/home/vickey/qtprojects/innerClass-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/../innerClass/Song.cpp:6: error: redefinition of 'void Song::Creator::name(std::string)'
,如果我更改名稱功能到
void Creator::name(const string name)
{
mName=name;
std::cout<<name;
//return *this;
}
我得到這個錯誤
/home/vickey/qtprojects/innerClass-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/../innerClass/Song.cpp:6: error: 'Creator' has not been declared
什麼是我在做錯了嗎?提前致謝。
風格建議:像'SONG_H'這樣的短名稱有一天會發生碰撞,而從經驗來看,標題防守衝突很可能讓人困惑。就我個人而言,我會做'',例如'#ifndef SONG_H_20120330'。由於時間不可逆,如果在同一天有多個相同名稱的文件(在這種情況下,您寫'SONG_20120330a'或'SONG_20120330_1959') –
2012-03-30 08:10:13
謝謝我會記住 – 2012-03-30 08:14:56