LINUX.ORG.RU

Проблема с оптимизацией исходников.

 


0

2

Так как c++ начал изучать недавно, столкнулся с проблемой распределения исходников. Вот скажите что я делаю не так? Сколько не гуглил все не выходит. Файл: main.cpp

#include <GL/glew.h>
#include <SDL.h>

#include "initialization.h"

void Game();
void Cleanup();

int main(int argc, char *argv[]){
	//Инициализация
	initialization();
	//Запускаем игру
	Game();
	//Завершаем работу
	Cleanup();
	return 0;
}

void Game(){
	bool launched = true;
	float xrf = 0, yrf = 0, zrf = 0;
	float gtx = 0, gty = 0, gtz = -4.0;
	while(launched){
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		glFlush();
		SDL_GL_SwapWindow(mainWindow);
	}
}

void Cleanup(){
	SDL_GL_DeleteContext(mainContext);
	SDL_DestroyWindow(mainWindow);
	SDL_Quit();
}

Файл: initialization.h

#ifndef __INITIALIZATION_H__
#define __INITIALIZATION_H__

SDL_Window *mainWindow;
SDL_GLContext mainContext;

void initialization();
bool SetOpenGLAttributes();
void PrintSDL_GL_Attributes();
void CheckSDLError(int line);

#endif // __INITIALIZATION_H__

Файл: initialization.cpp

#include <iostream>
#include <GL/glew.h>
#include <SDL.h>

#include "initialization.h"

std::string gameName = "SDL TEST";

int window_w = 1280;
int window_h = 720;

void initialization(){

	setlocale(LC_ALL, "Russian");

	// Инициализация SDL
	if (SDL_Init(SDL_INIT_VIDEO) < 0){
		std::cout << "Unable to init SDL, error: " << SDL_GetError() << std::endl;
	}

	// Создаем окно
	mainWindow = SDL_CreateWindow(gameName.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, window_w, window_h, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL );

	// Проверяем окно
	if (!mainWindow){
		std::cout << "Окно не созданно\n";
		CheckSDLError(__LINE__);
	}

	// Создаем контекст OpenGL
	mainContext  = SDL_GL_CreateContext(mainWindow);

	// Устанавливаем отрибуты OpenGL
	SetOpenGLAttributes();

	// Проверка версий OpenGL
	PrintSDL_GL_Attributes();

}

bool SetOpenGLAttributes(){

*********

}

void CheckSDLError(int line = -1){

*********

}

void PrintSDL_GL_Attributes() {

*********

}

Ошибки при компиляции:

obj\Debug\main.o||In function `SDL_main':|
...\main.cpp|10|multiple definition of `mainContext'|
...\initialization.cpp|12|first defined here|
|error: ld returned 1 exit status|

Попробуй

extern SDL_Window *mainWindow;
extern SDL_GLContext mainContext;

в initialization.h.

И ещё

SDL_Window *mainWindow;
SDL_GLContext mainContext;

в initialization.cpp.

Esper
()
Последнее исправление: Esper (всего исправлений: 1)

Учите основы C++. У вас SDL_GLContext mainContext; в хедере. И он будет создан/включён и в main.cpp и в initialization.cpp.

Поместите его в класс, и уже его создавайте. Или extern добавьте.

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 2)
Ответ на: комментарий от Esper

А можно производить include, в самих заголовочных файлах или нет? А то я вынес Game(), и библиотека в main.cpp SDL2 больше не нужна, вот я её и отключил, но возникла ошибка что SDL_Window, SDL_GLContext не обнаружены.

mysql_connect
() автор топика
Ответ на: комментарий от mysql_connect

Конечно. #include просто копирует содержимое указанного файла на своё место. Почитайте про стадию препроцессинга.

evilface ★★
()
Ответ на: комментарий от evilface

Ответ вроде как ТСу, но вроде как коментирует/расширяет твой.

Uter
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.