компилятор пинается на какое-то множественное обьявление, но то, что как он считает множественно обьявляется не существуют в представленном им коде
Логи:
SDL_Renderer * renderer = get_rnd();
^
C:\c++\programs\life3\main.cpp:18:15: warning: unused variable 'window' [-Wunused-variable]
SDL_Window * window = get_wnd();
^
In file included from C:\c++\programs\life3\Presenter/Observer.h:15:0,
from C:\c++\programs\life3\main.cpp:13:
C:/c++/programs/life3/Input/Input.h: In member function 'cords Input::check_input()':
C:/c++/programs/life3/Input/Input.h:39:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
In file included from C:\c++\programs\life3\SDL_stuf\cGraf.h:25:0,
from C:\c++\programs\life3\SDL_stuf\customSDL.h:19,
from C:\c++\programs\life3\SDL_stuf\customSDL.cpp:1:
C:/c++/programs/life3/pcgGlobal.h:35:18: warning: 'Dark' defined but not used [-Wunused-variable]
static SDL_Color Dark = {67, 68, 69}; // dark grey
^
C:/c++/programs/life3/pcgGlobal.h:36:18: warning: 'Dark2' defined but not used [-Wunused-variable]
static SDL_Color Dark2 = {34, 34, 34}; // dark grey
^
C:/c++/programs/life3/pcgGlobal.h:37:18: warning: 'Grey' defined but not used [-Wunused-variable]
static SDL_Color Grey = {187, 191, 194}; // light grey
^
C:/c++/programs/life3/pcgGlobal.h:38:18: warning: 'Red' defined but not used [-Wunused-variable]
In file included from C:\c++\programs\life3\main.cpp:12:0:
C:\c++\programs\life3\pcgGlobal.h: At global scope:
C:\c++\programs\life3\pcgGlobal.h:35:18: warning: 'Dark' defined but not used [-Wunused-variable]
static SDL_Color Dark = {67, 68, 69}; // dark grey
^
C:\c++\programs\life3\pcgGlobal.h:36:18: warning: 'Dark2' defined but not used [-Wunused-variable]
static SDL_Color Dark2 = {34, 34, 34}; // dark grey
^
C:\c++\programs\life3\pcgGlobal.h:37:18: warning: 'Grey' defined but not used [-Wunused-variable]
static SDL_Color Grey = {187, 191, 194}; // light grey
^
C:\c++\programs\life3\pcgGlobal.h:38:18: warning: 'Red' defined but not used [-Wunused-variable]
static SDL_Color Red = {255, 0, 0}; // red
^
C:\c++\programs\life3\pcgGlobal.h:40:18: warning: 'Blue' defined but not used [-Wunused-variable]
static SDL_Color Blue = {0, 0, 255}; // blue
^
C:\c++\programs\life3\pcgGlobal.h:42:18: warning: 'Cool' defined but not used [-Wunused-variable]
static SDL_Color Cool = { 0,100,100 }; //cool
^
static SDL_Color Red = {255, 0, 0}; // red
^
C:/c++/programs/life3/pcgGlobal.h:40:18: warning: 'Blue' defined but not used [-Wunused-variable]
static SDL_Color Blue = {0, 0, 255}; // blue
^
C:/c++/programs/life3/pcgGlobal.h:42:18: warning: 'Cool' defined but not used [-Wunused-variable]
static SDL_Color Cool = { 0,100,100 }; //cool
^
In file included from C:\c++\programs\life3\SDL_stuf\customSDL.h:20:0,
from C:\c++\programs\life3\SDL_stuf\cGraf.h:13,
from C:\c++\programs\life3\SDL_stuf\cView.cpp:1:
C:/c++/programs/life3/pcgGlobal.h:35:18: warning: 'Dark' defined but not used [-Wunused-variable]
static SDL_Color Dark = {67, 68, 69}; // dark grey
^
C:/c++/programs/life3/pcgGlobal.h:36:18: warning: 'Dark2' defined but not used [-Wunused-variable]
static SDL_Color Dark2 = {34, 34, 34}; // dark grey
^
C:/c++/programs/life3/pcgGlobal.h:37:18: warning: 'Grey' defined but not used [-Wunused-variable]
static SDL_Color Grey = {187, 191, 194}; // light grey
^
C:/c++/programs/life3/pcgGlobal.h:38:18: warning: 'Red' defined but not used [-Wunused-variable]
static SDL_Color Red = {255, 0, 0}; // red
^
C:/c++/programs/life3/pcgGlobal.h:40:18: warning: 'Blue' defined but not used [-Wunused-variable]
static SDL_Color Blue = {0, 0, 255}; // blue
^
C:/c++/programs/life3/pcgGlobal.h:42:18: warning: 'Cool' defined but not used [-Wunused-variable]
static SDL_Color Cool = { 0,100,100 }; //cool
^
obj\Debug\Model\Creature.o: In function `ZN8Creature9make_moveEi':
C:/c++/programs/life3/Model/Creature.cpp:3: multiple definition of `renderera'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\Model\Creature.o: In function `ZN8Creature9make_moveEi':
C:/c++/programs/life3/Model/Creature.cpp:3: multiple definition of `windowa'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\Model\Turn_Handler.o: In function `ZN6ObjectC2Ev':
C:/c++/programs/life3/Model/Turn_Handler.cpp:5: multiple definition of `renderera'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\Model\Turn_Handler.o: In function `ZN6ObjectC2Ev':
C:/c++/programs/life3/Model/Turn_Handler.cpp:5: multiple definition of `windowa'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\Model\World.o: In function `ZNSt12_Destroy_auxILb1EE9__destroyIP4FoodEEvT_S4_':
C:/c++/programs/life3/Model/World.cpp:4: multiple definition of `renderera'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\Model\World.o: In function `ZNSt12_Destroy_auxILb1EE9__destroyIP4FoodEEvT_S4_':
C:/c++/programs/life3/Model/World.cpp:4: multiple definition of `windowa'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\SDL_stuf\customSDL.o: In function `ZSt4moveIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS8_':
C:/c++/programs/life3/SDL_stuf/customSDL.cpp:5: multiple definition of `renderera'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\SDL_stuf\customSDL.o: In function `ZSt4moveIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS8_':
C:/c++/programs/life3/SDL_stuf/customSDL.cpp:5: multiple definition of `windowa'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\SDL_stuf\cView.o: In function `ZN4View4LineE5cordsS0_9SDL_Color':
C:/c++/programs/life3/SDL_stuf/cView.cpp:5: multiple definition of `renderera'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
obj\Debug\SDL_stuf\cView.o: In function `ZN4View4LineE5cordsS0_9SDL_Color':
C:/c++/programs/life3/SDL_stuf/cView.cpp:5: multiple definition of `windowa'
obj\Debug\main.o:C:/c++/programs/life3/Input/Input.h:28: first defined here
collect2.exe: error: ld returned 1 exit status
вот два примера кода, первый, где переменная , якобы, переобъявляется, второй где она, опять же якобы, обьявлена впервые
void Creature::make_move(int dir)
{// ТУТ ПЕРЕОБЬЯВЛЕНА
switch( dir )
{
case RIGHT:
x = x + spd;
break;
case LEFT:
x = x - spd;
break;
case UP:
y = y - spd;
break;
case DOWN:
y = y + spd;
break;
}
}
cords Input::check_input()
{// И ЯКОБЫ НА ЭТОЙ СТРОЧКЕ ОБЬЯВЛЕНА ВПЕРВЫЕ
if( SDL_PollEvent( &e ) != 0)
{
if( e.type == SDL_MOUSEBUTTONDOWN )
{
int mx,my;
SDL_GetMouseState(&mx,&my);
cords click = { mx,my };
return click;
}
}
}
Хотя данная переменная обьявлена абсолютно в другом месте, как статичный указатель с функциями доставания
SDL_Renderer * renderera=nullptr;
SDL_Window * windowa=nullptr;
inline SDL_Renderer* get_rnd() { return renderera; }
inline SDL_Window* get_wnd() { return windowa; }
первые 20 строк Creature.cpp
#include "Creature.h"
void Creature::make_move(int dir)
{
switch( dir )
{
case RIGHT:
x = x + spd;
break;
case LEFT:
x = x - spd;
break;
case UP:
y = y - spd;
break;
case DOWN:
y = y + spd;
break;
}
27,28,29 строка Input.h
cords Input::check_input()
{
if( SDL_PollEvent( &e ) != 0)
Из вашего описания можно сделать вывод, что объявления
SDL_Renderer * renderera=nullptr;
SDL_Window * windowa=nullptr;
inline SDL_Renderer* get_rnd() { return renderera; }
inline SDL_Window* get_wnd() { return windowa; }
у вас располагаются в некоем заголовочном файле, который включен в несколько файлов реализации. Это, разумеется, приводит к ошибкам множественного определения renderera
и windowa
(как и должно быть).
В GCC при компиляции с -g
линкер в сообщениях об ошибках множественного определения выдает не только имена объектных файлов, в которых располагаются эти множественные определения, но и строчки исходных файлов, в которых эти определения были сделаны. В некоторых случаях линкер в такой ситуации указывает на бессмысленную строчку (см. напр. комментарий)
Ваша попытка "исправить ошибку" путем объявления renderera
и windowa
как static
является, разумеется, бессмысленной профанацией. Эти переменные скорее всего задуманы как глобальные. Более того, такое "исправление" делает вашу программу некорректной. Это нарушение ODR (no diagnostic is required). Inline-функциям с внешним связыванием не разрешается ссылаться на разные статические переменные в контексте разных единиц трансляции.
Простейший способ исправить ошибку в С++17 - объявить их как inline
.
Чтож, потыкаясь в код, решил обьявить SDL_Renderer * renderera и SDL_Window * windowa как статичные, это полностью решило проблему. Спасибо, кто пытался помочь.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь поэкспериментировать с файлами в проектеВыводит ошибки LNK2005 и LNK1169
Задание: Вывести слова введенного текста, изменив каждое слово следующим образом: буквы слова, стоящие до первой гласной, перенести в конец...
Проблема в xPtr, никак не могу найти ошибку, он на нулевом элементе даже