【发布时间】:2012-03-30 07:09:21
【问题描述】:
我有一个名为 Song 的类,内部类 Creator 。下面是 Song.h 文件。请忽略 cmets。
#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)'
如果我将 name 函数更改为
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这样的短名称总有一天会发生冲突,根据经验,header-guard 冲突非常令人困惑。就个人而言,我做<NAME_OF_FILE_DATETIME>,例如#ifndef SONG_H_20120330。因为时间不可逆,只有在同一天有多个同名文件时才会发生冲突(在这种情况下,你写SONG_20120330a或SONG_20120330_1959) -
谢谢,我会记住这一点
标签: c++ class inner-classes