Я столкнулся с ошибкой, которая поставила меня в тупик на многие дни. Быстрый 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;
}
Изменить это:
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) Вы не связываете (и, вероятно, не компилируете) свой файл mortgage.cpp. Проверьте конфигурацию проекта IDE, чтобы убедиться, что он включает mortgage.cpp
в качестве исходного файла.
2) Вы не должны воспроизводить определение класса в вашем файле cpp. Скорее, структурируйте это так:
#include "mortgage.h"Mortage::Mortgage(double d) { ... }
У вас есть проблемы с основным синтаксисом 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 */ }