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

C++代码编译报错:main重定义、标识符未声明等问题求助

C++编译错误解决方案

问题描述

编写了一段C++代码,意图初始化全局对象并通过main()启动菜单,但遭遇多个编译错误,谷歌搜索未找到解决办法,特求助。

相关代码

// 主cpp文件:Maschinenplanung_Marco.cpp
#include <iostream>
#include <stdio.h>
#include "CPlanung.h"
#include "CBuchung.h"

using namespace std;

CPlanung cp;

CMaschine Maschinen[5] = {
    Maschinen[0] = CMaschine(1, "Drehbank"),
    Maschinen[1] = CMaschine(2, "Fräser"),  
    Maschinen[2] = CMaschine(3, "Schleifmaschine"),
    Maschinen[3] = CMaschine(4, "Automat 1"),
    Maschinen[4] = CMaschine(5, "Automat 2")
};

CProjekt Projekt[10] = {
    
    Projekt[0] = CProjekt(1, "Winkel"),
    Projekt[1] = CProjekt(2, "Strebe"),
    Projekt[2] = CProjekt(3, "Stütze"),
    Projekt[3] = CProjekt(4, "Halterung"),
    Projekt[4] = CProjekt(5, "Winkel"),
    Projekt[5] = CProjekt(6, "Sockel"),
    Projekt[6] = CProjekt(7, "Abdeckung"),
    Projekt[7] = CProjekt(8, "Befestigung"),
    Projekt[8] = CProjekt(9, "Anschluss"),
    Projekt[9] = CProjekt(10, "Lager")

};

int main()
{
    cp.StartProjekt();
    return 0;
}
// CBuchung.h
#pragma once
#include <cstddef>
#include <iostream>
#include <algorithm>
#include <vector>
#include "CProjekt.h"
#include "CPlanung.h"
#include "Maschinenplanung_Marco.cpp"  // 错误:头文件包含cpp文件

using namespace std;

class CBuchung
{
protected:
    struct Buchung {
        int _maschine;
        int _projekt;
        int _beginn;
        int _ende;
    }_buchungen[200] = { {3, 1, 1, 1},{4, 1, 2, 3}, {4, 4, 2, 5}, {3, 1, 4, 5},{3, 5, 5, 6},{3,1,10,11}, {3,2,11,11} }, buchung;
    bool existsMasch, existsBeginn, existsProj, exists;
    int n, temp, sum;
public:
    CBuchung(); //Konstruktor
    void Buchen(int Maschine, int Projekt, int Beginn, int Ende);
    void Stornieren(int Maschine, int Projekt, int Beginn, int Ende);
    void getBuchungenProj(int Projekt);
    void getBuchungenMasch(int Maschine);
    void Belegung();
};
// CPlanung.h
#pragma once
#include <iostream>
#include "CMaschine.h"
#include "CProjekt.h"
#include "CBuchung.h"
#include "Maschinenplanung_Marco.cpp"  // 错误:头文件包含cpp文件

using namespace std;

class CPlanung
{
protected:
    int wahl, maschinenWahl, projektWahl, beginn, ende;
public:
    CPlanung();
    void StartProjekt(void);
    void Buchen(void);
    void Stornieren(void);
    void Projektliste(void);
    void Maschinenliste(void);
    void Belegung(void);
    void Doppelbelegung(void);
};

编译错误信息

  • 错误 C2065:"cp":未声明的标识符,项目MaschinenPlanung_Marco,文件C:\Users\danie\source\repos\MaschinenPlanung_Marco\MaschinenPlanung_Marco\Maschinenplanung_Marco.cpp,第36行
  • 错误 C2374:"Maschinen":重复定义;多次初始化,上述文件第9行
  • 错误 C2084:函数"int main(void)"已有函数体,上述文件第34行(出现两次)

错误原因及解决方法

1. 头文件包含cpp文件导致重复定义(错误2、3)

原因:在CBuchung.h和CPlanung.h中都包含了Maschinenplanung_Marco.cpp,当这些头文件被包含到主cpp中时,cpp文件内容会被重复编译,导致全局变量Maschinen和main函数被多次定义。

解决方法:

  • 移除所有头文件中对.cpp文件的#include语句,头文件仅负责声明类、函数和常量,实现代码必须放在单独的.cpp文件中。
  • 为每个类创建对应实现文件,比如CBuchung.cpp实现CBuchung类成员函数,CPlanung.cpp实现CPlanung类成员函数。

2. 循环头文件包含导致CPlanung未提前声明(错误1)

原因:CPlanung.h包含CBuchung.h,CBuchung.h又包含CPlanung.h,形成循环依赖,编译器处理主cpp时,定义全局对象cp前无法正确解析CPlanung类,导致"cp未声明"。

解决方法:

  • 在CBuchung.h中,用前向声明替代直接包含CPlanung.h:
    // CBuchung.h中替换#include "CPlanung.h"为:
    class CPlanung;
    
  • 仅当需要访问CPlanung类具体成员时,才在CBuchung.cpp中包含CPlanung.h。

3. 全局数组初始化方式错误

原因:全局数组Maschinen和Projekt使用Maschinen[0] = ...的赋值语法,这不是合法的数组初始化列表写法,会引发编译异常。

解决方法:

  • 使用标准列表初始化语法:
    CMaschine Maschinen[5] = {
        CMaschine(1, "Drehbank"),
        CMaschine(2, "Fräser"),  
        CMaschine(3, "Schleifmaschine"),
        CMaschine(4, "Automat 1"),
        CMaschine(5, "Automat 2")
    };
    
    CProjekt Projekt[10] = {
        CProjekt(1, "Winkel"),
        CProjekt(2, "Strebe"),
        CProjekt(3, "Stütze"),
        CProjekt(4, "Halterung"),
        CProjekt(5, "Winkel"),
        CProjekt(6, "Sockel"),
        CProjekt(7, "Abdeckung"),
        CProjekt(8, "Befestigung"),
        CProjekt(9, "Anschluss"),
        CProjekt(10, "Lager")
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:40:54