C++ return 来自方法的结构
C++ return structure from method
我想 return 来自方法的结构,但是 returned 结构需要在不同的 class 中使用。这是我当前的代码:
Song.h:
class song{
public:
Song(char szTitle[50]);
Song();
struct ToneStruct;
ToneStruct GetNextNote();
~Song();
};
Song.cpp:
struct ToneStruct {
char cTone;
int iTime;
int iTimePassed;
};
ToneStruct Song::GetNextNote(){
while (iTempTime != endOfFile) {
//do stuff
while (iTempTime != 59) {
//do stuff
}
ToneStruct toneStruct(cTone,iPlayTime, iTimePassed);
return toneStruct;
}
ToneStruct endStruct('X', 0, 0);
return endStruct;
}
由于该方法,我收到一条错误消息 "declaration is incompatible with song.h",而在方法内部的结构上,它显示 "incomplete type is not allowed"。我做错了什么?
您已在 song
class 中向前声明 struct ToneStruct
,这意味着它在 song
命名空间内并且因此可以作为 song::TongStruct
访问,但是您在源文件 外部 song
命名空间中声明了一个 ToneStruct
结构,然后可以将其作为 ToneStruct
。编译器会将它们视为不同的类型。
要修复此错误,您应该将前向声明移出 class 或使用 Song::ToneStruct
作为您的类型。
struct ToneStruct
你声明 在 你的 class Song
(或者是 song
?)与你声明的 struct ToneStruct
不同在文件级别。前者是成员类型Song::ToneStruct
,后者是全局命名空间中的名称
如果你想前向声明 ToneStruct
,你需要在任何 class.
之外进行
另一种选择是在整个过程中定义和使用 Song::ToneStruct
而不是 ::ToneStruct
。
它可能对你帮助不大,因为在这种情况下,前向声明是不够的。 Return 函数类型在函数使用前必须是完整类型。这实际上意味着 song.h 需要在声明 GetNextNote
之前完全定义 struct ToneStruct
。
如果您只想在 Song.cpp
中使用 GetNextNote
,您可以使用前向声明,但 GetNextNote
可能不应该是 public 成员.
我想 return 来自方法的结构,但是 returned 结构需要在不同的 class 中使用。这是我当前的代码:
Song.h:
class song{
public:
Song(char szTitle[50]);
Song();
struct ToneStruct;
ToneStruct GetNextNote();
~Song();
};
Song.cpp:
struct ToneStruct {
char cTone;
int iTime;
int iTimePassed;
};
ToneStruct Song::GetNextNote(){
while (iTempTime != endOfFile) {
//do stuff
while (iTempTime != 59) {
//do stuff
}
ToneStruct toneStruct(cTone,iPlayTime, iTimePassed);
return toneStruct;
}
ToneStruct endStruct('X', 0, 0);
return endStruct;
}
由于该方法,我收到一条错误消息 "declaration is incompatible with song.h",而在方法内部的结构上,它显示 "incomplete type is not allowed"。我做错了什么?
您已在 song
class 中向前声明 struct ToneStruct
,这意味着它在 song
命名空间内并且因此可以作为 song::TongStruct
访问,但是您在源文件 外部 song
命名空间中声明了一个 ToneStruct
结构,然后可以将其作为 ToneStruct
。编译器会将它们视为不同的类型。
要修复此错误,您应该将前向声明移出 class 或使用 Song::ToneStruct
作为您的类型。
struct ToneStruct
你声明 在 你的 class Song
(或者是 song
?)与你声明的 struct ToneStruct
不同在文件级别。前者是成员类型Song::ToneStruct
,后者是全局命名空间中的名称
如果你想前向声明 ToneStruct
,你需要在任何 class.
另一种选择是在整个过程中定义和使用 Song::ToneStruct
而不是 ::ToneStruct
。
它可能对你帮助不大,因为在这种情况下,前向声明是不够的。 Return 函数类型在函数使用前必须是完整类型。这实际上意味着 song.h 需要在声明 GetNextNote
之前完全定义 struct ToneStruct
。
如果您只想在 Song.cpp
中使用 GetNextNote
,您可以使用前向声明,但 GetNextNote
可能不应该是 public 成员.