构造函数将运行,但不能从其他文件运行

时间:2018-12-14 13:32:34

标签: c++ class oop

很抱歉,这里的C ++很新,在任何地方都找不到我要找的答案。我正在尝试使用OOP和多个文件在C ++中运行最简单的程序。如果Vehicle类中没有doSomething()函数,则构造函数可以正常打印。当我添加函数并调用car.doSomething()时,只会给我错误。我搜索了几天,找不到有效的答案。

main.cpp

#include <stdio.h>
#include <iostream>
#include "Vehicle.h"

using namespace std;

int main(int argc, char **argv){
    Vehicle car;

    car.doSomething();

    return 0;
}

Vehicle.cpp

#include "Vehicle.h"

Vehicle::Vehicle(){
    cout << "do something" << endl;
}

void doSomething(){
    cout << "do something else" << endl;
}

Vehicle.h

#pragma once
#include <iostream>

using namespace std;

class Vehicle{
    public:
        Vehicle();
        void doSomething();
};

就像我说的那样,这是C ++的新手,不确定如何解决此问题。感谢您的帮助。

规格:

Codelite v10.0.0,

Linux Ubuntu 18.04

错误:对“ Vehicle :: doSomething()”的未定义引用

3 个答案:

答案 0 :(得分:1)

在这种情况下,我想您有“未解决”的链接器错误。这意味着错误不在运行时中,而是在构建时。错误消息可能提示您链接器找不到Vehicle :: doSomething()。这表明您实际上没有提供doSomething()函数。读取错误输出,有助于了解错误所在。

答案 1 :(得分:1)

您无需搜索几天;您只需要阅读C ++书中有关定义成员函数的章节。

它是这样的:

void Vehicle::doSomething()
{
    cout << "do something else" << endl;
}

计算机知道Vehicle::的定义是doSomething类的Vehicle(就像您已经对构造函数所做的一样)。

否则,它只是一个普通功能。该文件称为Vehicle.cpp没关系; C ++并不真正在乎文件名。无论文件名为Vehicle.cpp还是Stuff.cppLightness4Eva.cpp,您都可以在该文件中拥有各种函数,变量,类定义等(这并不是说您的命名约定是不过不好!)。

答案 2 :(得分:0)

使用.cpp文件中的类名编写doSomting()定义:

void Vehicle::doSomething()
{
cout << "do something else" << endl;
}