Может ли кто-нибудь объяснить, почему я получаю синтаксическую ошибку: идентификатор 'Bar' во время сборки без включения class Bar;
в заголовочный файл foo.hpp
?
Я не получаю никаких ошибок в Visual Studio2019 перед сборкой, и порядок сборки выглядит как bar
, затем foo
, затем main
, поэтому после операторов #include
может показаться, что файл заголовка bar
сначала включен в foo
заголовок во время сборки.
Я включил приведенный ниже код с изложением основной проблемы.
//Foo header file
#pragma once
#include "bar.hpp"
#include <iostream>
class Bar; //Commenting this line out results in no longer being able to build the project
class Foo {
public:
Foo();
void pickSomething(Bar& bar);
};
//Foo cpp file
#include "foo.hpp"
Foo::Foo() {
std::cout << "Made Foo" << std::endl;
}
void Foo::pickSomething(Bar& bar) {
bar.getSomething();
std::cout << "Picked something!" << std::endl;
}
//Bar header file
#pragma once
#include "foo.hpp"
#include <iostream>
class Foo;
class Bar {
public:
Bar(Foo& foo);
void getSomething();
};
//Bar cpp file
#include "bar.hpp"
Bar::Bar(Foo& foo) {
std::cout << "Made bar" << std::endl;
}
void Bar::getSomething() {
std::cout << "Gave something!" << std::endl;
}
//main file
#include "foo.hpp"
#include "bar.hpp"
int main() {
Foo foo;
Bar bar(foo);
foo.pickSomething(bar);
return 0;
}