首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未解析外部符号

未解析外部符号
EN

Stack Overflow用户
提问于 2011-07-10 21:41:24
回答 4查看 251关注 0票数 0

可能重复:

What is an undefined reference/unresolved external symbol error and how do I fix it?

我对C++还比较陌生(您可能可以从问题中看出),我遇到了一个问题。我有两个文件: Drives.h和Drives.cpp

Drives.h

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#include "stdafx.h"
#include "Drives.h"

Drives::Drives(void)
{
    Drive USB0; //Error happening here
}

Drives::~Drives(void)
{
}

错误是说驱动器类构造函数、析构函数和IsConnected()都是未解决的外部变量。我不知道我错过了什么,因为我像在cplusplus.com上一样设置了这个类

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-10 21:44:50

正如错误消息所述,您尚未实现Drive的构造函数和析构函数。

代码语言:javascript
复制
Drive::Drive(void) {
    ...
}

Drive::~Drive(void) {
    ...
}

创建类类型的局部变量(如在Drive USB0;中所做的)将调用该类的构造函数,并且析构函数将在变量的作用域末尾被调用;因此出现错误。

您也应该实现Drive的其他函数--在类声明中声明函数本质上是一个承诺,该函数将在某个地方实现。

票数 4
EN

Stack Overflow用户

发布于 2011-07-10 21:44:59

是的,这些方法已经在头文件中的Drive类中声明过,但实际上还没有为这些方法创建一个主体。

您必须在头文件中创建内联体,在CPP文件中创建主体,或者确保与定义这些方法的现有文件链接。否则,错误是正确的,这些方法还没有定义。

票数 3
EN

Stack Overflow用户

发布于 2011-07-10 21:49:51

未解决的外部符号错误通常意味着您提供了一个函数的声明,而不是它的定义。

在您的示例中,由于您声明了Drive(void)~Drive(void),编译器将删除它的默认值,并期望您的定义存在,而它们并不存在,因此它会抛出一个错误。

顺便提一句:使用void代替空括号来表示“此函数不带参数”是C风格的定义,不应使用。

另外,使用#pragma once作为包含警卫的替代。它是一个特定于微软的构造,与其他编译器不兼容.使用实际的包含警卫,而不是:

代码语言:javascript
复制
#ifndef CLASS_NAME_H
#define CLASS_NAME_H
//CODE HERE
#endif
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6643903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档