Неразрешенный внешний символ

Я столкнулся с ошибкой, которая поставила меня в тупик на многие дни. Быстрый Google не дал мне ответа. Код, на мой взгляд, не содержит ошибок, однако при запуске программы я получаю ошибку 9 Unresolved External 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;
}

0

Решение

Изменить это:

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&число = 15.

1

Другие решения

1) Вы не связываете (и, вероятно, не компилируете) свой файл mortgage.cpp. Проверьте конфигурацию проекта IDE, чтобы убедиться, что он включает mortgage.cpp в качестве исходного файла.

2) Вы не должны воспроизводить определение класса в вашем файле cpp. Скорее, структурируйте это так:

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

У вас есть проблемы с основным синтаксисом C ++.

#pragma once является специфическим для Visual Studio и является заменой для защиты заголовков. Это никогда не должно появляться в .cpp файл

Вы предоставляете два разных определения класса Mortage один в заголовке, второй в .cpp файл

Правильный синтаксис для определения класса следующий:

Заголовочный файл:

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

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

.cpp файл:

/* something.cpp */
#include "something.h"
Something::Something() { /* implementation */ }

void Something::some_method() { /* implementation */ }
0
По вопросам рекламы [email protected]