c++ - 未解析的外部符号

  显示原文与译文双语对照的内容

我遇到了一个错误,现在已经困扰了我很多天了。 一个快速的谷歌没有给我一个答案。 在我看来,代码没有任何错误,但是当我运行这个程序时,我得到了 9个无法解析的外部 Symbol(LNK2019) 错误。 在试图解释我的错误之后,我相信它发生在一个名为 createMortgage的函数中。 这是我对这个函数的调用。 customers 是向量。


for (unsigned int i = 0; i <customers.size(); i++)
 {
 Customer tempcust = customers.at(i);
 if (tempcust.getId() == id)
 {
 customers.at(i).createMortgage();
 }
 }

下面是函数本身。


void createMortgage(){
 int amount;

 cout <<"Amount?";
 cin>> amount;

 Mortgage mort(amount);
 mortgages.push_back(mort);
 }

在这里,所有的荣耀,就是错误。


Error 4 error LNK2019: unresolved external symbol"public: __thiscall Mortgage::Mortgage(double)" (??0Mortgage@@QAE@N@Z) referenced in function"public: void __thiscall Customer::createMortgage(void)" (?createMortgage@Customer@@QAEXXZ) F:C++ assignment (Real)C++ assignment (Real)Driver.obj C++ assignment (Real)

这是我的抵押. h 文件。


#pragma once
//#include <iostream>
//#include <String>

class Mortgage
{

private:
 int id;
 double amount;

public:
 Mortgage(double amount);
 double getAmount();
 int getId();
};

这是我的抵押. cpp 文件。


#pragma once

extern int idcreation;

class Mortgage
{

 int id;
 double amount;

 Mortgage(double amount)
 {
 this -> amount = amount;
 this -> id = idcreation;
 idcreation++;
 }

 int getId(){
 return id;
 }

 double getAmount(){
 return amount;
 }

时间:

更改这里选项:


class Mortgage
{
int id;
double amount;

Mortgage(double amount)
{
 this -> amount = amount;
 this -> id = idcreation;
 idcreation++;
}

int getId(){
 return id;
}

double getAmount(){
 return amount;
}

对此:


#include"mortgage.h"

Mortgage::Mortgage(double amount)
{
 this -> amount = amount;
 this -> id = idcreation;
 idcreation++;
}

int Mortgage::getId(){
 return id;
}

double Mortgage::getAmount(){
 return amount;
}

我看到你并不真正得到如何使用标题和源文件来制作类,本教程将向你介绍: http://thenewboston.org/watch.php?cat=16&number=15

1 ) 你没有将( 可能没有编译) 链接到 mortgage.cpp 文件。 检查IDE项目配置,以确保它包含 mortgage.cpp 作为源文件。

2 ) 你不能在cpp文件中重新生成类定义。 相反,这样结构:


#include"mortgage.h"
Mortage::Mortgage(double d) {.. . }

基本 C++ 语法有问题。

#pragma once 是特定于 Visual Studio的,它是头保护的替代。 它不应该出现在 .cpp 文件中

你提供了两个不同的定义,它的中的类 Mortage 在头中,第二个是 .cpp 文件

定义类的正确语法如下:

标题 file:


/* something.h */
#ifndef SOMETHING_H_
#define SOMETHING_H_

class Something
{
public:
 Something();
 void some_method();
};
#endif

.cpp file:


/* something.cpp */
#include"something.h"

Something::Something() {/* implementation */}

void Something::some_method() {/* implementation */}

...