很抱歉,这里的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()”的未定义引用
答案 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.cpp
或Lightness4Eva.cpp
,您都可以在该文件中拥有各种函数,变量,类定义等(这并不是说您的命名约定是不过不好!)。
答案 2 :(得分:0)
使用.cpp文件中的类名编写doSomting()定义:
void Vehicle::doSomething()
{
cout << "do something else" << endl;
}