编译多源文件时未解决的外部问题

时间:2013-09-02 23:50:20

标签: c++ unresolved-external multifile

我有一个由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

3 个答案:

答案 0 :(得分:2)

您已声明Car::Car()但未定义它。向.cpp文件添加定义,或从标题中删除声明。

例如:

Car::Car()
{
}

答案 1 :(得分:2)

您错过了Car()的默认构造函数的实现。

class Car
{
public:
   // There is no implementation.
   Car();
}

答案 2 :(得分:0)

看起来您已经为汽车定义了默认构造函数但尚未实现它。然后你声明了一个类型为car的变量,它需要实现它。将Kerrek上面的代码添加到.cpp文件应该可以解决问题:)