0

2 つの CPP ファイル (main.cpp と Car.cpp) とヘッダー ファイル (Car.h) で構成されるプロジェクトがあります。このプログラムは、ユーザーが車のモデル、メーカー、速度を入力し、変更された速度を表示できるようにすることを目的としています。私の問題は、プロジェクトをコンパイルすると、次のような「1つの未解決の外部」の問題が発生することです。

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Car::Car(void)" (??0Car@@QAE@XZ) referenced in function _main
1>C:\Users\Shaidi\Desktop\Classes\CIST 2362\Projects\main\Debug\main.exe : fatal error LNK1120: 1 unresolved externals

main.cpp ファイルは次のとおりです。

// main.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "Car.h"
#include <iostream>
#include <string>

using namespace std;
int main()
{
    string make;
    int model, speed;

    Car c;

    //user input and assignment for make, model, and speed
    cout << "Enter the make of the car: " <<endl;
    cin >> make;
    c.setMake(make);

    cout << "Enter the model of the car: " <<endl;
    cin >> model;
    c.setYearModel(model);

    cout << "Enter the speed of the car: " <<endl;
    cin >> speed;
    c.setSpeed(speed);

    //print make and model
    cout << "Car make: " << c.getMake() <<endl;
    cout << "Car model: " << c.getYearModel() << endl;
    cout << "Car speed: " << c.getSpeed() <<endl;

    //loops to calculate and print acceleration and braking
    for (int i = 0; i < 5; i ++){
        cout << "Car speed after acceleration: " <<c.accelerate() <<endl;
    }

    for (int i = 0; i < 5; i ++){
        cout << "Car speed after braking: " <<c.brake() <<endl;
    }
    return 0;
} //end main

Car.cpp ファイルは次のとおりです。

// Car.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Car.h"
#include <cstdlib>
#include <string>
#include <iostream>

using namespace std;

Car::Car(int y, string m)
{
    string make = m;
    int year = y;
    speed = 0;
}

void Car::setYearModel(int y)
{
    yearModel = y;
}

void Car::setSpeed(int s)
{
    if (s >= 0){
        speed = s;
    } else {
        cout << "Invalid speed";
        exit(EXIT_FAILURE);
    }
}

void Car::setMake(string m)
{
    make = m;
}

int Car::getYearModel()
{
    return yearModel;
}

int Car::getSpeed()
{
    return speed;
}

string Car::getMake()
{
    return make;
}

int Car::accelerate()
{
    return speed + 5;
}

int Car::brake()
{
    return speed - 5;
}

Car.h ファイルは次のとおりです。

#ifndef CAR_H
#define CAR_H
#include <string>

using namespace std;

class Car 
{
private:
    std::string make;
    int yearModel;
    int speed;
public:
    Car();
    Car(int, std::string);
    void setYearModel(int);
    void setSpeed(int);
    void setMake(std::string);
    int getYearModel() ;
    int getSpeed() ;
    int accelerate() ;
    int brake() ;
    std::string getMake() ;
}; 
#endif // CAR_H
4

3 に答える 3

2

宣言しましCar::Car()たが、定義したことはありません。.cpp ファイルに定義を追加するか、ヘッダーから宣言を削除してください。

例えば:

Car::Car()
{
}
于 2013-09-02T23:51:48.377 に答える
2

のデフォルト コンストラクタの実装がありませんCar()

class Car
{
public:
   // There is no implementation.
   Car();
}
于 2013-09-02T23:52:10.230 に答える
0

car のデフォルトのコンストラクターを定義しているようですが、実装していません。次に、実装が必要な car 型の変数を宣言しました。Kerrek が上記のコードを .cpp ファイルに追加すると、うまくいくはずです :)

于 2013-09-02T23:59:17.043 に答える