为什么这给了我"Undefined references to constructors and destructors"?
Why is this giving me "Undefined references to constructors and destructors"?
我有以下代码:
Leomedia.h
#include "MusicMetaDatter.h"
#ifndef LEOMEDIA_H
#define LEOMEDIA_H
namespace Leomedia
{
typedef enum
{
read,
write
} FileMode;
}
#endif // LEOMEDIA_H
MusicMetaDatter.h
#ifndef MUSICMETADATTER_H
#define MUSICMETADATTER_H
#include "Leomedia.h"
#include <string>
/**
* METADATTER
* @Version 1.0.0a
* @Author: Sergio Andrés Ibañez (Leonnears)
* @Twitter: Leonnears
* @Package: Leomedia
*/
namespace Leomedia
{
typedef enum
{
mp3,
m4a,
flac,
ape,
wavPack,
aiff,
wav,
ogg,
tta
} AudioFileType;
class MusicMetaDatter
{
public:
MusicMetaDatter(std::string fileName, AudioFileType type, FileMode mode);
virtual ~MusicMetaDatter();
private:
std::string md_fileName;
AudioFileType md_fileType;
FileMode md_fileMode;
};
}
#endif // MUSICMETADATTER_H
MusicMetaDatter.cpp
#include "MusicMetaDatter.h"
#include <string>
Leomedia::MusicMetaDatter::MusicMetaDatter(std::string fileName, AudioFileType type, FileMode mode)
{
this -> md_fileName = fileName;
this -> md_fileType = type;
this -> md_fileMode = mode;
}
Leomedia::MusicMetaDatter::~MusicMetaDatter()
{
//dtor
}
MetaDatterTest.cpp
#include <iostream>
#include "Leomedia.h"
#include <string>
using namespace std;
int main()
{
Leomedia::MusicMetaDatter meta("troll", Leomedia::mp3, Leomedia::read);
return 0;
}
当我编译MetaDatterTest我得到以下错误:
Leomedia::MusicMetaDatter::MusicMetaDatter(std::string, Leomedia:: audifiletype, Leomedia::FileMode)'对Leomedia::MusicMetaDatter::~MusicMetaDatter()的未定义引用对Leomedia::MusicMetaDatter::~MusicMetaDatter()'的未定义引用
所有的文件都在同一个目录下。我使用的是mingw 4.4.1
有人能帮我一下吗?您没有给出编译命令,但我怀疑它缺少MusicMetaDatter.cpp
。
应该像
g++ -o MetaDatterTest MetaDatterTest.cpp MusicMetaDatter.cpp
这些都是链接错误。它编译得很好。当你链接它时,你需要链接到包含MusicMetaDatter
析构函数的代码,否则你会得到那个错误。
这些不是编译错误,而是链接错误。这可能是因为你已经这样做了:
g++ MetaDatterTest.cpp
用
代替g++ MetaDatterTest.cpp MusicMetaDatter.cpp
试试这个!
现在我将评论你的编码风格:
Leomedia::MusicMetaDatter::MusicMetaDatter(std::string fileName, AudioFileType type, FileMode mode)
{
this -> md_fileName = fileName;
this -> md_fileType = type;
this -> md_fileMode = mode;
}
这是糟糕的风格。Leomedia
是一个命名空间,所以你写了Leomedia::MusicMetaDatter
,但你没有在参数列表中写Leomedia::AudioFileType
和Leomedia::FileMode
。
更好的编码风格是:
namespace Leomedia
{
MusicMetaDatter::MusicMetaDatter(std::string fileName, AudioFileType type, FileMode mode)
{
this -> md_fileName = fileName;
this -> md_fileType = type;
this -> md_fileMode = mode;
}
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- 为什么这给了我"Undefined references to constructors and destructors"?