0

重複の可能性:
未定義の参照/未解決の外部シンボルエラーとは何ですか?それを修正するにはどうすればよいですか?

どういうわけかこのエラーが発生します。これは私のコードです:

#ifndef BASESTATION_H_
#define BASESTATION_H_

#include <list>
#include "Song.h"
#include <string>

using mtm::Song;
using std::list;
namespace stations {

class baseStation {
public:
    explicit baseStation(double frequency) : frequency(frequency) {}
    double getFrequency() const;
    bool getIsFullVersion() const;
    bool isInPlaylist(const string& author, const string& name) const;
    virtual void addSong(const Song& song);
    virtual const Song& getCurrentSong() const;
    virtual const SongPart& getCurrentlyPlayedPart(unsigned int time) const;
    virtual ~baseStation();

private:
    //keep it protected or not??
    double frequency;
    list<Song> playlist;
    list<Song>::iterator currentSong;
    bool isFullVersion;
};

そして、私が得るエラーは次のとおりです。「明示的」行の「vtablefor station::baseStation」への未定義の参照。

どうもありがとうございました。`

4

2 に答える 2

0

ここに投稿したコードは問題ありません。独自のSongクラスとSongPartクラスを定義することで問題なくコンパイルできます(Song.hで定義されているのでコンパイルする必要があります)。

あなたの「Song.h」が何か変わったことをしていると思います。

于 2013-01-21T19:53:35.583 に答える
0

これはリンカーエラーですか?

このエラーは、コンパイラーが* .cppファイルで仮想メンバー定義を見つけることができない場合に発生する可能性があります(たとえば、すべての仮想関数をインラインで定義した場合)。どの仮想関数もソースファイルで定義されておらず、このエラーメッセージが生成されるため、リンカはクラスの仮想ポインタテーブルを生成するオブジェクトファイルを見つけることができません。解決策は、cppファイルに少なくとも1つの仮想メンバーを定義することです。

于 2013-01-21T19:57:40.087 に答える