MikerNO_8 2024-02-24 10:47 采纳率: 0%
浏览 13
已结题

c++多文件编译报错:undefined reference to

c++多文件编译报错:undefined reference to
除了复制构造函数Point::Point(const Point &p)链接成功以外,其余函数和属性皆报错undefined reference
编译器为C free4.0

//point.h文件
class Point{
    int x;
    int y;
    static int count;
public:
    Point(int x,int y);
    Point(const Point &p);
    ~Point();
    int getX();
    int getY();
    void showCount();
};

//Point.cpp文件
#include "point.h"
#include <iostream>

using namespace std;

int Point::count=0;

Point::Point(int x,int y):x(x),y(y){
    count++;
}

Point::Point(const Point &p):x(p.x),y(p.y){
    count++;
}

Point::~Point(){
    count++;
}

int Point::getX(){
    return x;
}

int Point::getY(){
    return y;
}

void Point::showCount(){
    cout<<"Object count="<<count<<endl;
}

//5_10.cpp文件
#include "point.h"
#include <iostream>

using namespace std;

void main(){
    Point a(4,5);
    a.showCount();
    Point b(3,5);
    b.showCount();
}
  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-24 11:05
    关注

    引自免费微信小程序:皆我百晓生

    在C++中,当你遇到“undefined reference to”错误时,通常是由于链接阶段找不到某个函数或变量的实现。在这个案例中,尽管复制构造函数成功链接,但其他成员函数(非静态)和析构函数在最终链接时出现了未定义引用的问题。

    问题在于,在5_10.cpp文件中,你虽然包含了point.h头文件,声明了Point类的成员函数,但是没有链接Point.cpp文件中的成员函数实现到你的主程序中去。

    要解决这个问题,你需要确保编译器在编译5_10.cpp文件时同时链接Point.cpp。对于命令行编译,你应该这样做:

    g++ -o 5_10 5_10.cpp Point.cpp
    

    或者如果你使用IDE,请确保将Point.cpp文件添加到项目的构建步骤中,确保它会被一起编译并链接。

    这样一来,编译器会找到并链接所有在Point.cpp中定义的成员函数,从而消除“undefined reference”的错误。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月24日
  • 赞助了问题酬金15元 2月24日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题