was amch ich falsch..???
-
hier is mein code... für ne save/load tmpate funktion...
main.cpp:#include "load.h" #include "save.h" #include <iostream> int main() { int temp; std::cout << "eine Zahl:\n"; std::cin >> temp; save<int>(&temp, "save"); std::cout << "\nlala....\n"; temp = 0; std::cout << "var = " << temp; std::cout << "\n nach laden...\n"; //load<int>(&temp, "save"); std::cout << "var = " << temp; std::cin.get(); std::cin.get(); return 0; }load.cpp
#include "load.h" template <class T> bool load(T * buffer, char * file = "save.ns") { std::fstream stream; std::string temp; stream.open(file, ios::in) buffer = dynamic_cast<T *>(""); if(!stream.badbit()) { temp = stream.read(); buffer += dynamic_cast<T *>(temp); return = true; } else { buffer = NULL; return false; } } template <class T> T * load(char * file = "save.ns") { fstream stream; stream.open(file, ios::in) string temp; T * data; if(!stream.badbit()) { temp = stream.read(); data += dynamic_cast<T *>(temp); return temp; } else { return NULL; } }save.cpp:
#include "save.h" template <typename T> bool save(T * data, char * file = "save.ns") { std::fstream stream; std::string temp stream.open(file, ios::out); if(!stream.badbit()) { temp = data; stream.write(temp); return true; } else { return false; } }ich krieg imme nen linker error:
[Linker Error] Unresolved external 'bool save<int>(int *, char *)' referenced from C:\PROGRAMME\DATEN\PROGGEN\C++\PROJEKTE\LIB\TEST.OBJich hab deen BCB 6 fall das was nütz.. mit allen updates...
-
Hallo
bei Templates muß auch die Implementation für den Compiler sichtbar sein, nicht nur die Definition. Also die Funktionsrümpe von load() und save() mit in die Headerdateien verschieben.
bis bald
akari
-
thx....
warum is das denn so???

-
Hallo
weil Templates erst bei dem konkreten Einsatz mit einem Typ ausgewertet werden, und deshalb die Implementation bekannt sein muß. Siehe dazu auch Tutorials und Forumsuche zum Thema Template.
bis bald
akari
-
jetz hab ich den code so geändert..
save.h#include <string> #include <fstream> template <typename T> bool save(T * data, char * file = "save.ns") { std::fstream stream; std::string temp; stream.open(file, ios_base::out); if(!stream.badbit) { temp = data; stream.write(temp.c_str()); return true; } else { return false; } }load.h
#include <string> #include <fstream> template <class T> bool load(T * buffer, char * file = "save.ns") { std::fstream stream; std::string temp; stream.open(file, ios_base::in) buffer = dynamic_cast<T *>(""); if(!stream.badbit) { temp = stream.read(); buffer += dynamic_cast<T *>(temp); return = true; } else { buffer = NULL; return false; } } template <class T> T * load(char * file = "save.ns") { fstream stream; stream.open(file, ios_base::in) string temp; T * data; if(!stream.badbit) { temp = stream.read(); data += dynamic_cast<T *>(temp); return temp; } else { return NULL; } }un jetz mein BCB6 folgendes..
[C++ Error] save.h(9): E2090 Qualifier 'ios_base' is not a class or namespace name [C++ Error] save.h(9): E2121 Function call missing ) [C++ Warning] save.h(10): W8008 Condition is always false [C++ Warning] save.h(12): W8066 Unreachable code [C++ Error] save.h(12): E2285 Could not find a match for '_STL::string::operator =(int *)' [C++ Error] save.h(13): E2193 Too few parameters in call to '_STL::ostream::write(const char *,int)' [C++ Error] load.h(9): E2090 Qualifier 'ios_base' is not a class or namespace name [C++ Error] load.h(9): E2121 Function call missing ) [C++ Warning] load.h(12): W8008 Condition is always false [C++ Warning] load.h(14): W8066 Unreachable code [C++ Error] load.h(14): E2193 Too few parameters in call to '_STL::istream::read(char *,int)' [C++ Error] load.h(14): E2285 Could not find a match for '_STL::string::operator =(_STL::istream)' [C++ Error] load.h(15): E2031 Cannot cast from '_STL::string' to 'int *' [C++ Error] load.h(16): E2188 Expression syntaxich versteh es net...please help
-
ios_base ist auch im namespace std.
alsostream.open(file, std::ios_base::out);genauso bei load.
Kurt
EDIT: was du mit den casts in load erreichen willst ist mir nicht klar.