Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构向量给出错误“;未在此范围内声明”;_C++_Data Structures_Vector_Struct_Initialization - Fatal编程技术网

C++ 结构向量给出错误“;未在此范围内声明”;

C++ 结构向量给出错误“;未在此范围内声明”;,c++,data-structures,vector,struct,initialization,C++,Data Structures,Vector,Struct,Initialization,我有一个声明如下的结构: #ifndef PLAYLIST_H #define PLAYLIST_H #include <iostream> #include <string> #include <vector> #include "playlistitem.h" #include "song.h" #include "time.h" struct Playlist { std::vector<Song> songs; Time c

我有一个声明如下的结构:

#ifndef PLAYLIST_H
#define PLAYLIST_H
#include <iostream>
#include <string>
#include <vector>
#include "playlistitem.h"
#include "song.h"
#include "time.h"
struct Playlist {
    std::vector<Song> songs;
    Time cdTotalTime;
    int totalTime;
};
我在头文件中有两个结构定义,它们都应该包括在内

当我编译时,我在

std:vector<Song> songs;
std:矢量歌曲;
未在此作用域中声明错误“Song”


我遗漏了什么?

不仅是你的主文件,而且声明播放列表的文件也应该包括歌曲所在的文件。

不仅仅是你的主文件,但是
播放列表
所声明的文件也应该包括
歌曲
所在的文件。

歌曲的定义必须在
播放列表
的定义中使用之前。由于它们位于不同的标题中,您应该确保
播放列表
的标题包括
歌曲
的标题,并且两者都有适当的标题保护。

歌曲的定义必须在
播放列表
的定义中使用之前。由于它们位于不同的标题中,您应该确保
播放列表的标题包括
歌曲的标题,并且两者都有适当的标题保护。

Playlist.h包括Song.h

歌曲.h不应包括播放列表.h

头保护防止无限递归,它们不修复循环依赖


目前song.h确实包含playlist.h。然后,当playlist.h包含song.h时,不会发生任何事情(因为标题保护),并且未定义
song
。因此playlist.h会产生错误。

playlist.h包括song.h

歌曲.h不应包括播放列表.h

头保护防止无限递归,它们不修复循环依赖


目前song.h确实包含playlist.h。然后,当playlist.h包含song.h时,不会发生任何事情(因为标题保护),并且未定义
song
。因此playlist.h会产生错误。

您的标题以循环方式相互包含。这是无用和不必要的。为什么您的
歌曲.h
包括
播放列表.h
?从
song.h
中删除
#包括“playlist.h”
,这将修复错误。

您的标题以循环方式相互包含。这是无用和不必要的。为什么您的
歌曲.h
包括
播放列表.h
?从
song.h
中删除
#包括“playlist.h”
,这将修复错误。

您可以通过将
struct song放置在标题中来创建
song
的原型
并只在.c/.cpp文件中包含标题。这样做的好处是编译速度更快!:D

递归包含可以很好地使用包含防护,只要您正确地安排它们。我总是尝试在.h文件中包含最少的头,将它们留给源文件


另外,我在你的代码上没有看到一个#endif。现在,我假设您的代码实际上拥有它;)

你可以在你的头中放入
struct-Song来原型化
Song
并只在.c/.cpp文件中包含标题。这样做的好处是编译速度更快!:D

递归包含可以很好地使用包含防护,只要您正确地安排它们。我总是尝试在.h文件中包含最少的头,将它们留给源文件


另外,我在你的代码上没有看到一个#endif。现在,我假设您的代码实际上拥有它;)

是否确实已将歌曲的定义文件包括在文件中,定义播放列表?而且它在同一个名称空间中?你如何“按照它们应该的样子”包含它们?(提示:您没有;))请向我们显示您使用定义的文件。您确定已将
歌曲
的定义文件包含在定义
播放列表
的文件中吗?而且它在同一个名称空间中?你如何“按照它们应该的样子”包含它们?(提示:您不是;))请向我们展示您使用定义的文件。
std:vector<Song> songs;