第一个 c++ 文件和标头LNK2019错误

First c++ file and header LNK2019 error

提问人:Mick 提问时间:8/3/2015 最后编辑:Some programmer dudeMick 更新时间:8/3/2015 访问量:494

问:

这是我第一次拥有单独的文件,也是第一次编写头文件,但是我总是收到无法修复的相同错误。文件如下:

//main.cpp    
#include <iostream>
#include "Bike.h"

/*
class Bike{
public:
     int tyreDiameter;
     int getTyreDi(){
         return tyreDiameter;
    }
}; */

int main(){
    Bike b;
    b.tyreDiameter = 50;
    std::cout << b.getTyreDi();

while (1){
    continue;
}

return 0;
}

//Bike.cpp
class Bike{
    public:
        int tyreDiameter;
        int getTyreDi(void){
            return tyreDiameter;
        }
};

//Bike.h
#ifndef BIKE_H
#define BIKE_H

class Bike{
    public:
        int tyreDiameter;
        int getTyreDi(void);
};

#endif

现在,如果我只有一个文件并使用 main.cpp 中注释掉的类,一切正常。但是,一旦我尝试将 Bike 类分离到另一个 cpp 文件中,就会出现此错误:

Error 1   error LNK2019: unresolved external symbol "public: int
__thiscall Bike::getTyreDi(void)" (?getTyreDi@Bike@@QAEHXZ) 

Error 2   error LNK1120: 1 unresolved externals

我正在使用 Microsoft Visual Studio 2013。 任何帮助将不胜感激

C++ LNK2019 未解析的外部

评论


答:

0赞 Hatted Rooster 8/3/2015 #1

你为什么要定义两次类?在 和 中,正确的方式是这样的: 页眉Bikecpph

//Bike.h
#ifndef BIKE_H
#define BIKE_H

class Bike{
    public:
        int tyreDiameter;
        int getTyreDi(void);
};

#endif

CPP系列

//Bike.cpp
#include "Bike.h"
int Bike::getTyreDi(void)
{
  //implementation like return tyreDiameter;
}

评论

0赞 Mick 8/3/2015
感谢您的快速回复。因此,从您所说的内容来看,我是否可以假设头文件在语法上描述了类的外观,而 cpp 文件只是定义了该类的功能?
0赞 Hatted Rooster 8/3/2015
@Mick正确。头文件描述了类应该做什么,cpp 文件描述了如何做到这一点。
0赞 Mick 8/3/2015
非常感谢杰米。请再做一件事;你说的在MSVS2013中完美运行,但是我喜欢使用 Notepad++ 并使用 MSVS2013 命令行编译器进行编译。当我尝试执行命令“cl /EHsc main.cpp”(不带引号)时,它给了我与上述相同的错误。有什么想法吗?
0赞 Mick 8/3/2015
我解决了。我只需要把'cl /EHsc main.cpp Bike.cpp'。再次感谢。