Hi Leute hab ein Problem mit den mingw Compiler (mit den g++ Comp. mit Linux, funk es)
Hab eine .h und eine cpp datei mit 2 template und in einer namespace.
basic.h
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
namespace FileBinary{
template<class T>
std::ostream& writeBinary(std::ostream& stream,const T& value){ ///< Fehler
stream.write(reinterpret_cast<const char*>(&value),sizeof(value));
return stream;
}
template<class T>
std::istream& readBinary(std::istream& stream,T& value){ ///< Fehler
stream.read(reinterpret_cast<char*>(&value),sizeof(value));
return stream;
}
template<class T>
std::ostream& writeBinary(std::ostream& stream,const std::vector<T>& vec){
size_t size = vec.size();
stream.write(reinterpret_cast<const char*>(&size),sizeof(size));
for(size_t i = 0;i < vec.size();i++)
writeBinary(stream,vec.at(i));
return stream;
}
template<class T>
std::istream& readBinary(std::istream& stream,std::vector<T>& vec){
size_t size = vec.size();
stream.read(reinterpret_cast<char*>(&size),sizeof(size));
vec.resize(size);
for(size_t i = 0;i < vec.size();i++)
readBinary(stream,vec.at(i));
return stream;
}
}
|
basic.cpp
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
namespace FileBinary{
template<>
std::ostream& writeBinary(std::ostream& stream,const std::string& str){ ///< Fehler
size_t strlength = str.length();
stream.write(reinterpret_cast<const char*>(&strlength),sizeof(strlength));
stream.write(str.c_str(),strlength);
return stream;
}
template<>
std::istream& readBinary(std::istream& stream,std::string& str){ ///< Fehler
size_t strlength = 0;
stream.read(reinterpret_cast<char*>(&strlength),sizeof(strlength));
char* buffer = new char[strlength+1]();
stream.read(buffer,strlength);
str = buffer;
delete[] buffer;
return stream;
}
}
|
Fehlermeldung:
basic.cpp|111|multiple definition of `std::ostream& FileBinary::writeBinary<std::string>(std::ostream&, std::string const&)'
basic.h|150|first defined here
basic.cpp|119|multiple definition of `std::istream& FileBinary::readBinary<std::string>(std::istream&, std::string&)'
\basic.h|156|first defined here
Hab schon einges versucht.
Hab die template als extern definiert.
Die template von der .cpp in die .h datei.