可能重复:
What is an undefined reference/unresolved external symbol error and how do I fix it?
我对C++还比较陌生(您可能可以从问题中看出),我遇到了一个问题。我有两个文件: Drives.h和Drives.cpp
Drives.h
#pragma once
enum MountMode
{
User,
System,
Both,
Auto
};
class Drive
{
public:
Drive(void);
~Drive(void);
BOOL Mount(MountMode mode);
VOID Unmount(void);
BOOL IsConnected(void);
static char* DeviceName;
static char* DrivePath;
};
class Drives
{
public:
Drives(void);
~Drives(void);
};我的Drives.cpp:
#include "stdafx.h"
#include "Drives.h"
Drives::Drives(void)
{
Drive USB0; //Error happening here
}
Drives::~Drives(void)
{
}错误是说驱动器类构造函数、析构函数和IsConnected()都是未解决的外部变量。我不知道我错过了什么,因为我像在cplusplus.com上一样设置了这个类
提前感谢
发布于 2011-07-10 21:44:50
正如错误消息所述,您尚未实现Drive的构造函数和析构函数。
Drive::Drive(void) {
...
}
Drive::~Drive(void) {
...
}创建类类型的局部变量(如在Drive USB0;中所做的)将调用该类的构造函数,并且析构函数将在变量的作用域末尾被调用;因此出现错误。
您也应该实现Drive的其他函数--在类声明中声明函数本质上是一个承诺,该函数将在某个地方实现。
发布于 2011-07-10 21:44:59
是的,这些方法已经在头文件中的Drive类中声明过,但实际上还没有为这些方法创建一个主体。
您必须在头文件中创建内联体,在CPP文件中创建主体,或者确保与定义这些方法的现有文件链接。否则,错误是正确的,这些方法还没有定义。
发布于 2011-07-10 21:49:51
未解决的外部符号错误通常意味着您提供了一个函数的声明,而不是它的定义。
在您的示例中,由于您声明了Drive(void)和~Drive(void),编译器将删除它的默认值,并期望您的定义存在,而它们并不存在,因此它会抛出一个错误。
顺便提一句:使用void代替空括号来表示“此函数不带参数”是C风格的定义,不应使用。
另外,不使用#pragma once作为包含警卫的替代。它是一个特定于微软的构造,与其他编译器不兼容.使用实际的包含警卫,而不是:
#ifndef CLASS_NAME_H
#define CLASS_NAME_H
//CODE HERE
#endifhttps://stackoverflow.com/questions/6643903
复制相似问题