You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中正确实现自定义类分文件编写并解决编译错误?

C++类分文件编写的正确实现方案

1. 头文件 (car.h)

必须添加头文件保护,避免重复包含导致类重定义:

#ifndef CAR_H
#define CAR_H

#include <string>

class Car {
private:
    std::string brand;
    int year;
public:
    // 构造函数声明
    Car(std::string b, int y);
    // 成员函数声明
    void displayInfo();
    void setYear(int y);
    int getYear();
};

#endif // CAR_H

2. 类实现文件 (car.cpp)

包含头文件,实现所有成员函数:

#include "car.h"
#include <iostream>

// 构造函数实现
Car::Car(std::string b, int y) : brand(b), year(y) {}

// 成员函数实现
void Car::displayInfo() {
    std::cout << "Brand: " << brand << ", Year: " << year << std::endl;
}

void Car::setYear(int y) {
    year = y;
}

int Car::getYear() {
    return year;
}

3. 主程序文件 (main.cpp)

包含头文件,使用Car类:

#include "car.h"

int main() {
    Car myCar("Toyota", 2020);
    myCar.displayInfo();
    myCar.setYear(2022);
    myCar.displayInfo();
    return 0;
}

4. 正确的编译链接命令

用g++的话,直接一次性编译所有源文件生成可执行文件:

g++ main.cpp car.cpp -o mycar

或者分步编译再链接:

# 编译main.cpp生成目标文件
g++ -c main.cpp
# 编译car.cpp生成目标文件
g++ -c car.cpp
# 链接两个目标文件生成可执行文件
g++ main.o car.o -o mycar

错误原因解析

  • 单独编译main.cpp出现未定义符号:main.cpp里只包含了类的声明,没有成员函数的实现代码,编译时编译器仅知晓类的结构,但找不到函数的具体实现逻辑,必须将car.cpp的目标文件一同链接才能解决。
  • 类重定义错误:头文件未加保护,当多个源文件重复包含car.h时,类的声明会被多次插入到代码中,链接阶段就会触发重复定义报错。添加#ifndef/#define/#endif或#pragma once(多数主流编译器支持)即可避免。
  • 预处理指令错误:大概率是头文件保护的写法有误(比如拼写错误、遗漏#endif),或是包含自定义头文件时误用了<>而非""(自己编写的头文件需用双引号包含)。

内容的提问来源于stack exchange,提问作者Funlamb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:55:23