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.OBJ
    

    ich 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 syntax
    

    ich versteh es net...please help



  • ios_base ist auch im namespace std.
    also

    stream.open(file, std::ios_base::out);
    

    genauso bei load.

    Kurt

    EDIT: was du mit den casts in load erreichen willst ist mir nicht klar.


Anmelden zum Antworten