C++ 头文件混乱

问题描述 投票:0回答:1

我正在尝试用C++实现长算术和一些相关的类。

文件树:

Home_assignment  
|  
| - cmake-build-debug  
|   |  
|   | - standard clion project files  
|  
| - CMakeLists.txt  
|  
| - common.h  
|  
| - DOUBLE.cpp  
| - DOUBLE.h  
|  
| - Fraction.cpp  
| - Fraction.h  
|  
| - INT.cpp  
| - INT.h  
|  
| - main.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.26)
project(Home_assignment)

set(CMAKE_CXX_STANDARD 23)

add_executable(Home_assignment main.cpp
        common.h
        INT.h
        INT.cpp
        Fraction.cpp
        Fraction.h
        DOUBLE.cpp
        DOUBLE.h
        )

common.h:

#pragma once

#include <string>
#include <algorithm>
#include <iostream>
#include <vector>
#include <exception>

#include "INT.h"
#include "DOUBLE.h"
#include "Fraction.h"

分数.h:

#pragma once
#include "common.h"
INT gcd(const INT& a, const INT& b) {return b ? gcd(b, a%b) : a;}
class Fraction {
  public:
    friend class INT;
    friend class DOUBLE;
    Fraction() = default;
  private:
    INT den_;
    INT num_;
};

所有标题都有这些行:

#pragma once 
#include "common.h"

我已经完全实现了 INT 类并从 Fraction 类开始。但是编译的时候出现了错误:

C:\Users\USR\AppData\Local\Programs\CLion\bin\cmake\win\x64\bin\cmake.exe --build C:\Users\USR\CLionProjects\Home_assignment\cmake-build-debug --target Home_assignment -j 6
[0/1] Re-running CMake...
-- Configuring done (0.1s)
-- Generating done (0.0s)
-- Build files have been written to: C:/Users/USR/CLionProjects/Home_assignment/cmake-build-debug
[1/2] Building CXX object CMakeFiles/Home_assignment.dir/INT.cpp.obj
FAILED: CMakeFiles/Home_assignment.dir/INT.cpp.obj 
C:\Users\USR\AppData\Local\Programs\CLion\bin\mingw\bin\g++.exe   -g -std=gnu++23 -fdiagnostics-color=always -MD -MT CMakeFiles/Home_assignment.dir/INT.cpp.obj -MF CMakeFiles\Home_assignment.dir\INT.cpp.obj.d -o CMakeFiles/Home_assignment.dir/INT.cpp.obj -c C:/Users/USR/CLionProjects/Home_assignment/INT.cpp
In file included from C:/Users/USR/CLionProjects/Home_assignment/common.h:11,
                 from C:/Users/USR/CLionProjects/Home_assignment/INT.h:2,
                 from C:/Users/USR/CLionProjects/Home_assignment/INT.cpp:1:
C:/Users/USR/CLionProjects/Home_assignment/Fraction.h:4:1: error: 'INT' does not name a type
    4 | INT gcd(const INT& a, const INT& b) {
      | ^~~
C:/Users/USR/CLionProjects/Home_assignment/Fraction.h:15:5: error: 'INT' does not name a type
   15 |     INT den_;
      |     ^~~
C:/Users/USR/CLionProjects/Home_assignment/Fraction.h:16:5: error: 'INT' does not name a type
   16 |     INT num_;
      |     ^~~
ninja: build stopped: subcommand failed.

我尝试在网上寻找同样的问题,但没有找到任何东西。我尝试与 chatGPT 聊天,但他的所有答案都类似于“将

#include <INT>
行添加到 Fraction.h”。他的答案之一是“将
class INT;
添加到 Fraction.h” - 我尝试了此操作,但遇到了其他错误,例如:
field 'den_' has incomplete type 'INT'
。我还尝试更改
add_executable
中文件的顺序。

c++ cmake header clion c++23
1个回答
0
投票

Лев, ну такое не знать((( простите

© www.soinside.com 2019 - 2024. All rights reserved.