0

私は何日もの間私を困惑させているエラーに遭遇しました。簡単なグーグルは私に答えを与えませんでした。私の目には、コードにエラーはありませんが、プログラムを実行すると、9 Unresolved External Symbol(LNK2019)エラーが発生します。エラーの1つを解読しようとした後、それは。という名前の関数で発生していると思います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;
    }
4

3 に答える 3

1

これを変える:

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 。

于 2012-12-05T16:33:03.403 に答える
0

1)mortgage.cppファイルをリンクしていません(おそらくコンパイルしていません)。IDEプロジェクトの構成をチェックしてmortgage.cpp、ソースファイルとして含まれていることを確認します。

2)cppファイルでクラス定義を複製してはなりません。むしろ、次のように構成します。

#include "mortgage.h"
Mortage::Mortgage(double d) { ... }
于 2012-12-05T16:41:03.583 に答える
0

基本的なC++構文に問題があります。

#pragma onceVisual Studio固有であり、ヘッダーガードの代わりになります。.cppファイルに表示されないようにする必要があります

クラスの2つの異なる定義を提供していますMortage。1つはヘッダーにあり、2つ目は.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 */ }
于 2012-12-05T16:45:17.123 に答える