ifndef und conio.h
-
Hallo
Sowohl in dermain.cpp als auch in der Function.h benutzt du den Typ BMP.
Da ist es am einfachsten, in Function.h den Include auf EasyBMP.h zu machen.Wenn du das nicht willst, must du in jeder cpp den Include machen.
/Edit : zu lansgam
bis bald
akari
-
CStoll schrieb:
PS: Stammen die Fehlermeldungen wirklich von DIESEM Quelltext? Die angegebenen Namen passen nicht zum Programm
ups. was ist den hier passiert? eigentlich sollten die fehlermeldungen aus DIESEM quelltext stammen. irgendwie ist das aber was vertauscht. eigentlich solls so aussehen:
error C2146: syntax error : missing ';' before identifier 'Bild'
error C2065: 'BMP' : undeclared identifier
error C2065: 'Bild' : undeclared identifierakari schrieb:
Da ist es am einfachsten, in Function.h den Include auf EasyBMP.h zu machen.
ja, so leider ist es leider nicht
habe ich natürlich auch schon probiert. aber wenn ich euren vorschlägen folge, gibt es 67 fehlermeldungen, wenn ich #include <EasyBMP.h> in die Function.h setze. hier ein ausschnitt:Error 80 fatal error LNK1169: one or more multiply defined symbols found C:\Dokumente und Einstellungen\User\Eigene Dateien\Visual Studio 2005\Projects\REST\BASIS\Debug\GetPixel2 FARB2.exe
Error 43 error LNK2005: "void __cdecl RangedPixelToPixelCopyTransparent(class BMP &,int,int,int,int,class BMP &,int,int,struct RGBApixel &)" (?RangedPixelToPixelCopyTransparent@@YAXAAVBMP@@HHHH0HHAAURGBApixel@@@Z) already defined in main.obj Function.obj
Error 76 error LNK2005: "void __cdecl RangedPixelToPixelCopyTransparent(class BMP &,int,int,int,int,class BMP &,int,int,struct RGBApixel &)" (?RangedPixelToPixelCopyTransparent@@YAXAAVBMP@@HHHH0HHAAURGBApixel@@@Z) already defined in main.obj Function.obj
Error 42 error LNK2005: "void __cdecl RangedPixelToPixelCopy(class BMP &,int,int,int,int,class BMP &,int,int)" (?RangedPixelToPixelCopy@@YAXAAVBMP@@HHHH0HH@Z) already defined in main.obj Function.obj
Error 75 error LNK2005: "void __cdecl RangedPixelToPixelCopy(class BMP &,int,int,int,int,class BMP &,int,int)" (?RangedPixelToPixelCopy@@YAXAAVBMP@@HHHH0HH@Z) already defined in main.obj Function.obj
Error 41 error LNK2005: "void __cdecl PixelToPixelCopyTransparent(class BMP &,int,int,class BMP &,int,int,struct RGBApixel &)" (?PixelToPixelCopyTransparent@@YAXAAVBMP@@HH0HHAAURGBApixel@@@Z) already defined in main.obj Function.obj
Error 74 error LNK2005: "void __cdecl PixelToPixelCopyTransparent(class BMP &,int,int,class BMP &,int,int,struct RGBApixel &)" (?PixelToPixelCopyTransparent@@YAXAAVBMP@@HH0HHAAURGBApixel@@@Z) already defined in main.obj Function.obj
Error 40 error LNK2005: "void __cdecl PixelToPixelCopy(class BMP &,int,int,class BMP &,int,int)" (?PixelToPixelCopy@@YAXAAVBMP@@HH0HH@Z) already defined in main.obj Function.obj
Error 73 error LNK2005: "void __cdecl PixelToPixelCopy(class BMP &,int,int,class BMP &,int,int)" (?PixelToPixelCopy@@YAXAAVBMP@@HH0HH@Z) already defined in main.obj Function.objwenn ich die #include <EasyBMP.h>-anweisung in main.cpp schreibe, bleiben die 3 oben aufgeführten fehlermeldungen.
danke nochmals für eure hilfe.
STICK.P.S.: ist es möglich, dass da was mit der EasyBMP.h nicht hinhaut? ich habe gerade meine eigene klasse geschrieben und wie oben empfohlen in MyFunction eingefügt, und es hat geklappt.
-
Das sind keine Probleme des Compilers, sondern des Linkers (und die deuten auf einen Fehler in der EasyBMP.h hin - stehen dort wirklich nur die Prototypen? Oder die kompletten Funktionen? Im letzteren Fall müsstest du das aufteilen)
Und die drei verbleibenden Compilerfehler dürften damit zusammenhängen, daß die Function.cpp auch die Definition von BMP kennen muß.
-
hi.
wie es aussieht, stehen die kompletten funktionen nicht in der EasyBMP.h, die sieht nämlich so aus:
/************************************************* * * * EasyBMP Cross-Platform Windows Bitmap Library * * * * Author: Paul Macklin * * email: macklin01@users.sourceforge.net * * support: http://easybmp.sourceforge.net * * * * file: EasyBMP.h * * date added: 01-31-2005 * * date modified: 02-06-2005 * * version: 1.00 * * * * License: BSD (revised/modified) * * Copyright: 2005-6 by the EasyBMP Project * * * * description: Main include file * * * *************************************************/ #include <iostream> #include <cmath> #ifndef EasyBMP #define EasyBMP #ifdef __BCPLUSPLUS__ // The Borland compiler must use this because something // is wrong with their cstdio file. #include <stdio.h> #else #include <cstdio> #endif #ifdef _MSC_VER // If MSVC++ specific code is ever required, this is // where it goes. #endif #ifdef __GNUC__ // If g++ specific code is ever required, this is // where it goes. #endif #ifdef __INTEL_COMPILER // If Intel specific code is ever required, this is // where it goes. #endif #ifndef _DefaultXPelsPerMeter_ #define _DefaultXPelsPerMeter_ int DefaultXPelsPerMeter = 3780; // set to a default of 96 dpi #endif #ifndef _DefaultYPelsPerMeter_ #define _DefaultYPelsPerMeter_ int DefaultYPelsPerMeter = 3780; // set to a default of 96 dpi #endif #include "EasyBMP_DataStructures.h" #include "EasyBMP_BMP.h" #include "EasyBMP_VariousBMPutilities.h" #ifndef _EasyBMP_Version_ #define _EasyBMP_Version_ "1.00" #endif #endifich glaube interessant sind zeile 62-64. dort steht nämlich alles andere drin. also nicht nur 'Prototypen', sondern 'kompletten Funktionen'. was kann ich nun machen? habe eigentlich keine lust, die mir jetzt einzeln vorzunehmen und die passenden .cpp's zu basteln.
-
stick_thai schrieb:
was kann ich nun machen? habe eigentlich keine lust, die mir jetzt einzeln vorzunehmen und die passenden .cpp's zu basteln.
Ich fürchte, genau das wirst du machen müssen, um dein Projekt zum Laufen zu bringen. (alternativ kannst du dem Herrn Macklin deine Meinung dazu schreiben, was für Müll er verzapft hat :D)
Die einzige Workaround-Lösung, die mir einfallen würde, wäre (aber das ist keine dauerhafte Lösung):
namespace { #include "EasyBMP.h" }(damit bekommt jeder Teil deines Projekts eine eigene Version der EasyBMP-Funktionen)
-
naja. dann kann man halt nichts machen.
trotzdem danke für die schnelle und kompetente hilfe!

STICK.
-
Die Funktionsdefinitionen stehen doch in der EasyBMP.cpp
Kann es sein, dass du die irgendwo mit includiert hast?
-
Braunstein schrieb:
Kann es sein, dass du die irgendwo mit includiert hast?
nee, das einzige, was ich includiere, ist die folgende zeile:
#include <EasyBMP.h>von der EasyBMP.cpp habe ich in meinem code nichts aufgeführt.
-
Ich habe folgendes bei mir gemacht.
1. ein neues Konsolenprojekt angelegt (in Code::Blocks)
2. folgenden Quelltext hineingeschrieben#include <iostream> #include <EasyBMP.h> int main() { std::cout << "Hello world!" << std::endl; BMP Bild; return 0; }3. die EasyBMP.cpp zum Projekt hinzugefügt
4. kompiliert und gelinkt
Ergebnis:
keine Fehler, eine Warnung..\EasyBMP.cpp:959: warning: unused variable 'ZeroWORD'
:: === Build finished: 0 errors, 1 warnings ===Es sollte also gehen.
-
okay danke. jetzt geht das bei mir auch. ich habe die .cpp vorher nie gebraucht, und die programme funktionierten auch so, etwa in der folgenden weise:
#include <iostream> #include <EasyBMP.h> int main() { BMP bild; return 0; }okay, jetzt habe ich aber die .cpp auch in mein projekt hinzugefügt

DANKE!!