C++ Already defined in nazwa.obj

0

Mam problem jak mi się wydaje z przestrzeniami nazw tylko , że nie bardzo umiem go naprawić.
Wyskakuje mi błąd :
Error 5 error LNK2005: "unsigned char * __cdecl LoadBitmapFile(char *,struct tagBITMAPINFOHEADER *)" (?LoadBitmapFile@@YAPAEPADPAUtagBITMAPINFOHEADER@@@Z) already defined in chapter10.obj C:\Users\Bob\Desktop\terrain\snowstorm.obj terrain

snowstorm.cpp

#include "snowstorm.h"
#include "bitmap.h"

chapter.cpp

#define WIN32_LEAN_AND_MEAN   

#include <windows.h>    
#include <winuser.h>    
#include <gl/gl.h>     
#include <stdio.h>
#include <math.h>
#include "HiResTimer.h"
#include "bitmap.h"
#include "glext.h"
#include "snowstorm.h"

#define WND_CLASS_NAME  "OpenGL Window Class"

bitmap.h

#include <stdlib.h>
#include <windows.h>
#include <stdio.h>

#define BITMAP_ID 0x4D42 // identyfikator pliku BMP

unsigned char *LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
{
	FILE *filePtr;								// wskaźnik pliku
	BITMAPFILEHEADER	 bitmapFileHeader;		// nagłówek pliku
	unsigned char	 *bitmapImage;			// bufor obrazu
	int					imageIdx = 0;			// licznik bajtów obrazu
	unsigned char		 tempRGB;				// zmienna zamiany składowych

	// otwiera plik w trybie "read binary"
	filePtr = fopen(filename, "rb");
	if (filePtr == NULL)
		return NULL;

	// wczytuje nagłówek pliku
	fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
	
	// sprawdza, czy rzeczywiście jest to plik BMP
	if (bitmapFileHeader.bfType != BITMAP_ID)
	{
		fclose(filePtr);
		return NULL;
	}

	// wczytuje nagłówek obrazu zapisanego w pliku
	fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);

	// ustawia wskaźnik pliku na początku danych opisujących obraz
	fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);

	// przydziela pamięć na bufor obrazu
	bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage);

	// sprawdza, czy pamięć została przydzielona
	if (!bitmapImage)
	{
		free(bitmapImage);
		fclose(filePtr);
		return NULL;
	}

	// wczytuje dane obrazu
	fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr);

	// sprawdza, czy operacja powiodła się
	if (bitmapImage == NULL)
	{
		fclose(filePtr);
		return NULL;
	}

	// zamienia składowe R i B values, aby uzyskać właściwy format RGB w OpenGL
	for (imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx+=3)
	{
		tempRGB = bitmapImage[imageIdx];
		bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
		bitmapImage[imageIdx + 2] = tempRGB;
	}

	// zamyka plik i zwraca wskaźnik bufora zawierającego obraz
	fclose(filePtr);
	return bitmapImage;
}

Z góry dzięki za każdą pomoc

0
// bitmap.h
#ifndef _BITMAP_H_
#define _BITMAP_H_
...
#endif
0

Niestety to nie pomogło , ten sam błąd cały czas

1

DeklaracjeęLoadBitmapFile daj w bitmap.h, a definicję przenieś do bitmap.cpp. Poza tym używaj strażników w plikach nagłówkowych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1