Ошибка при передаче объекта класса в конструктор другого по ссылке
Я попытался указать в качестве аргумента для конструктора одного класса ссылку на другой класс, определенный в другом файле:
Camera.h
#pragma once
#include <cmath>
#define M_PI 3.14159265358979323846
#include "MoveMatrix.h"
#include "MainRender.h"
#include <SFML/Graphics.hpp>
class Camera
{
public:
nc::NdArray <float> position_of_camera;
nc::NdArray <float> forward_cam;
nc::NdArray <float> up_cam;
nc::NdArray <float> right_cam;
float h_visibility;
float v_visibility;
float near_scene;
float far_scene;
float cZ;
float cY;
float cX;
Camera(MainRender &render, float cx, float cy, float cz);
nc::NdArray <float> translate_camera();
nc::NdArray <float> rotate_camera();
nc::NdArray <float> space_of_camera_matrix();
};
MainRender.h
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
#include "3DObjectDescription.h"
#include "Camera.h"
#include "Projection.h"
#include "MoveMatrix.h"
#include <NumCpp.hpp>
class MainRender
{
public:
sf::RenderWindow window;
float RenderX;
float RenderY;
void create_objects_on_scene();
void init();
void draw();
void main_loop();
};
На этапе компиляции ошибка:
error: expected ')' before '&' token
Я не знаю в чем причина ошибки, надеюсь, то Вы поможете разобраться!
Ответы (1 шт):
Вы пытаетесь определить класс Camera только после определения класса MainRender. И определить MainRender только после Camera. Происходит циклическая зависимость. С помощником #pragma once происходит такой порядок :
#include "MainRender.h"
# include "Camera.h"
#include "MainRender.h"
и стоп , class MainRender так и не будет определён для класса Camera.
Решается "предварительным" объявлением класса вместо полного.
Camera.h
// #include "MainRender.h"
class MainRender ;
MainRender.h
// #include "Camera.h"
// даже предварительного объявления пока не нужно
спасибо быстрому совету Fat-Zer