0

我有一个由 2 个 CPP 文件(main.cpp 和 Car.cpp)和一个头文件(Car.h)组成的项目。该程序旨在允许用户输入汽车的型号、品牌和速度,并显示修改后的速度。我的问题是,当我编译项目时,我收到一个“1 unresolved externals”问题,如下所示:

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 回答