gpt4 book ai didi

C++包含和重新定义类错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:04 24 4
gpt4 key购买 nike

我目前正在编写一个根据不同搜索歌曲的程序参数。在我的系统中有两种类型的歌曲:歌词和乐器。因为我需要将它们都放在 1 个 vector 中,所以我有一个歌曲类和一个 LyricsSong 和 InstrumentalSong 子类。

所以我有一个 Song.h 文件:

#include <stdio.h>
#include <iostream>
#include <string>


class Song
{
public:
std::string title;
virtual void print();
virtual void printSong(std::string query);
};

还有乐器和歌词子类,它们是这样定义的:

class LyricsSong : public Song
class InstrumentalSong : public Song

两者都包含 Song.h,并且在它们中都定义了类仅在头文件中。

当我尝试运行另一个使用这两个子类的文件时,并包括:

#include "LyricsSong.h"
#include "InstrumentalSong.h"

(显然还有更多 cpp 库),我得到以下编译错误:

In file included from /cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/InstrumentalSong.h:16:0,
from /cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/songsParser.cpp:26:
/cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/Song.h:6:7: error: redefinition of 'class Song'
class Song
^
In file included from /cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/LyricsSong.h:15:0,
from /cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/songsParser.cpp:25:
/cygdrive/c/Users/Username/Documents/C++ Workshop/ex2/ex2_code/Song.h:6:7: error: previous definition of 'class Song'
class Song
^

时间:

  • InstrumentalSong.h:16:0 和 LyricsSong.h:15:0 行是我包括“Song.h”
  • 行 songsParser.cpp:25 和 songsParser.cpp:26 是我的位置包括 InstrumentalSong.h 和 LyricsSong.h
  • 行 Song.h:6:7: 是 Song.h 的定义(它说的是类 Song,如上所示)。

我该怎么办?附言我从来不导入任何 cpp 文件,只导入头文件。

最佳答案

你必须告诉预处理器只包含你的头文件一次。您可以通过在所有 *.h 文件的顶部添加 #pragma once 来实现:

#pragma once

//Your header file's code

头文件始终以此行开头也是一个好习惯。

关于C++包含和重新定义类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com