C++ VSCode 无法将“(classname)”转换为 'int'

C++ VSCode Cannot convert '(classname)' to 'int'

我制作了一个简单的程序来测试我遇到的错误。不知道为什么即使代码没有问题也无法编译。如果我从 A.h 文件中删除“include B.h”行,它似乎与包含的库有关,因为它解决了问题。

main.cpp:

#include "A.h"
#include "B.h"

int main()
{
    A a; 
    B b;

    b.funcion(a);

    return 0;
}

A.h:

#pragma once
#include "B.h"

class A{};

B.h:

#pragma once
#include "A.h"

class B
{   
    public:
    void funcion(A a);
};

B.cpp:

#include "B.h"

void B::funcion(A a){}

终端输出:

> Executing task: bash -c make <

g++    -c -o src/main.o src/main.cpp
In file included from src/A.h:2,
                 from src/main.cpp:1:
src/B.h:7:18: error: ‘A’ has not been declared
    7 |     void funcion(A a);
      |                  ^
src/main.cpp: In function ‘int main()’:
src/main.cpp:9:12: error: cannot convert ‘A’ to ‘int’
    9 |  b.funcion(a);
      |            ^
      |            |
      |            A
In file included from src/A.h:2,
                 from src/main.cpp:1:
src/B.h:7:20: note:   initializing argument 1 of ‘void B::funcion(int)’
    7 |     void funcion(A a);
      |                  ~~^
make: *** [<integrado>: src/main.o] Error 1
The terminal process "/bin/bash '-c', 'bash -c make'" failed to launch (exit code: 2).

Terminal will be reused by tasks, press any key to close it.

那条消息对我来说毫无意义,任何地方都没有 'int' 变量。 使用 Ubuntu 20.04 和 Visual studio 代码。 请帮忙。

之所以命名 int,是因为 C++ 编译器假定它不知道的类型是 int

在头文件中,您必须使用 class 的前向声明。

C++ 不处理循环包含。

B.h

#pragma once

class A;

class B
{   
    public:
    void funcion(A a);
};

B.cpp

#include "A.h"
#include "B.h"

void B::funcion(A a){}

按值传递 class 变量,按 (const) 引用传递它是不好的做法。

B.h

#pragma once

class A;

class B
{   
    public:
    void funcion(const & A a);
};

B.cpp

#include "A.h"
#include "B.h"

void B::funcion(const & A a){}