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){}
我制作了一个简单的程序来测试我遇到的错误。不知道为什么即使代码没有问题也无法编译。如果我从 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){}