我嘗試運行與DEVC++模板類版本4.9.9.2 但它沒有工作 因爲:不能編譯模板類
編譯日誌:
//-------------------------------
Compiler: Default compiler
Building Makefile: "H:\BaiTap\Ky6\OPP\Test\Bai3.1_DEVC\Makefile.win"
Finding dependencies for file: H:\BaiTap\Ky6\OPP\Test\Bai3.1_DEVC\main.cpp
Finding dependencies for file: H:\BaiTap\Ky6\OPP\Test\Bai3.1_DEVC\Vecto.cpp
Executing make...
make.exe -f "H:\BaiTap\Ky6\OPP\Test\Bai3.1_DEVC\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"F:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"F:/Dev-Cpp/include/c++/3.4.2/backward" -I"F:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"F:/Dev-Cpp/include/c++/3.4.2" -I"F:/Dev-Cpp/include"
**F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h: In instantiation of `std::iterator_traits<float>':
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:96: instantiated from `std::reverse_iterator<float>'
Vecto.h:22: instantiated from `Vecto<float>'
main.cpp:9: instantiated from here
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h:129: error: `float' is not a class, struct, or union type
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h:130: error: `float' is not a** class, struct, or union type
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h:131: error: `float' is not a class, struct, or union type
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h:132: error: `float' is not a class, struct, or union type
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator_base_types.h:133: error: `float' is not a class, struct, or union type
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h: In instantiation of `std::reverse_iterator<float>':
Vecto.h:22: instantiated from `Vecto<float>'
main.cpp:9: instantiated from here
**F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:96: error: no type named `iterator_category' in `struct std::iterator_traits<float>'**
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:103: error: no type named `difference_type' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:104: error: no type named `reference' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:105: error: no type named `pointer' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:150: error: no type named `reference' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:162: error: no type named `pointer' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:220: error: no type named `difference_type' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:229: error: no type named `difference_type' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:241: error: no type named `difference_type' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:250: error: no type named `difference_type' in `struct std::iterator_traits<float>'
F:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:262: error: no type named `reference' in `struct std::iterator_traits<float>'
Vecto.h: In instantiation of `Vecto<float>':
main.cpp:9: instantiated from here
Vecto.h:22: error: template-id `operator+<float>' for `Vecto<float> operator+(const Vecto<float>&, const Vecto<float>&)' does not match any template declaration
Vecto.h:24: error: template-id `operator-<float>' for `Vecto<float> operator-(const Vecto<float>&, const Vecto<float>&)' does not match any template declaration
Vecto.h:33: error: template-id `operator<< <float>' for `std::basic_ostream<char, std::char_traits<char> >& operator<<(std::basic_ostream<char, std::char_traits<char> >&, const Vecto<float>&)' does not match any template declaration
Vecto.h:35: error: templ
........................
make.exe: *** [main.o] Error 1
Execution terminated
//---------------------------------
,這裏是我的代碼
//-----------------------------------
#ifndef VECTO_H_
#define VECTO_H_
#include <iostream>
using namespace std;
template < class T >
class Vecto {
private:
int n;
T *data;
public:
// constructor
Vecto(int = 0);
// copy constuctor
Vecto(const Vecto&);
// destructor
~Vecto();
friend Vecto operator+ <T> (const Vecto &lvt, const Vecto &rvt);
friend Vecto operator- <T> (const Vecto &lvt, const Vecto &rvt);
template < class U >
friend U operator* (const Vecto <U> &lvt, const Vecto <U> &rvt);
const Vecto &operator= (const Vecto &);
T &operator[] (int) const;
friend ostream &operator << <T> (ostream &,const Vecto &);
friend istream &operator >> <T> (istream &,Vecto &);
};
#endif
//-----------------------------
//file Vecto.cpp
#include "Vecto.h"
using namespace std;
template < class T >
Vecto <T> ::Vecto(int n){
this- > n = n;
data = new T[n];
}
template < class T >
Vecto <T> ::Vecto(const Vecto <T> &vt){
n = vt.n;
delete [] data;
data = new T[n];
for(int i=n-1; i > =0; i--)
data[i] = vt.data[i];
}
template < class T >
Vecto <T> ::~Vecto(){
if(data != NULL)
delete[] data;
}
template < class T >
Vecto <T> operator+ (const Vecto <T> &lvt, const Vecto <T> &rvt){
Vecto <T> *p = NULL;
if(lvt.n == rvt.n){
p = new Vecto <T> (lvt.n);
for(int i=0; i < lvt.n ; i++)
p- > data[i] = lvt.data[i] + rvt.data[i];
}
return *p;
}
template < class T >
Vecto <T> operator- (const Vecto <T> &lvt, const Vecto <T> &rvt){
Vecto <T> *p = NULL;
if(lvt.n == rvt.n){
p = new Vecto <T> (lvt.n);
for(int i=0; i < lvt.n ; i++)
p- > data[i] = lvt.data[i] - rvt.data[i];
}
return *p;
}
template < class T >
T operator* (const Vecto <T> &lvt, const Vecto <T> &rvt){
T result =0;
if(lvt.n == rvt.n){
for(int i = lvt.n -1; i > =0; i--)
result += (lvt.data[i]*rvt.data[i]);
}
return result;
}
template < class T >
const Vecto <T> &Vecto <T> ::operator= (const Vecto <T> &vt){
delete []data;
n = vt.n;
data = new T[n];
for(int i=0; i < n;i++)
data[i] = vt.data[i];
return (*this);
}
template < class T >
T &Vecto <T> ::operator[] (int i) const{
T null = 0;
if(i < 0||i > =n) return null;
else return data[i];
}
template < class T >
ostream &operator < < (ostream &out, const Vecto <T> &vt){
out < < "Dims of Vecto: " < < vt.n < < endl;
out < < "Data:" < < endl;
for(int i = 0; i < vt.n; i++)
out < < vt.data[i] < < " ";
out < < endl;
return out;
}
template < class T >
istream &operator > > (istream &in, Vecto <T> &vt){
for(int i = 0; i < vt.n; i++){
cout < < "Vecto[" < < i < < "]=";
in > > vt.data[i];
}
return in;
}
//----------------------------------------------------------
//file main.cpp
#include <cstdlib>
#include <iostream>
#include "Vecto.h"
using namespace std;
int main(int argc, char *argv[])
{
Vecto <float> vt1(2);
cin > > vt1;
Vecto <float> vt2 = vt1;// - vt1;
vt2[0] = 100;
cout < < vt2;
cout < < vt2*vt1 < < endl;
system("PAUSE");
return EXIT_SUCCESS;
}
//--------------------------------
,你可以在這裏下載代碼。
http://www.mediafire.com/?3hknr5kj33mh4h8 任何一個能幫助我嗎? 感謝閱讀這篇文章。
即非常多的(格式錯誤的)代碼。請將其降至最低限度以重現您的問題。 – Johnsyweb 2011-05-08 10:03:12
請修復您的格式。預覽窗格位於添加/編輯框正下方,並且位於右側。 – 2011-05-08 10:13:22
Dev-C++很簡單,老舊。我強烈建議你避免它。 Code :: Blocks是一個很好的選擇。 – 2011-05-08 11:03:54