Thread: [Dev-C++] cannot compile matrix class
Open Source C & C++ IDE for Windows
Brought to you by:
claplace
|
From: <h.r...@gm...> - 2002-02-28 05:34:06
|
Hello,
I try the following example from Stroustrub "The C++ programming language" (
the german edition), but it does not compile and I can't find the errors.
Can everyone help me ?
Thanks in advance
greetings
Horst
the .h file:
#ifndef array2D_H
#define array2D_H
#include <valarray>
class Matrix
{
valarray<double>* v;
size_t d1, d2;
public:
Matrix (size_t x, size_t y);
Matrix& Matrix(const Matrix&);
Matrix& operator=(const Matrix&);
~Matrix();
size_t size() const { return d1 * d2; }
size_t dim1() const { return d1; }
size_t dim2() const { return d2; }
Slice_iter<double> zeile (size_t i);
Cslice_iter<double> zeile (size_t i) const;
Slice_iter<double> spalte (size_t i);
Cslice_iter<double> spalte (size_t i) const;
double& operator() (size_t x, size_t y);
double operator() (size_t x, size_t y) const;
Slice_iter<double> operator() (size_t i) { return zeile(i); }
Cslice_iter<double> operator() (size_t i) const { return zeile(i); }
Slice_iter<double> operator[] (size_t i) { return zeile(i); }
Cslice_iter<double> operator[] (size_t i) const { return zeile(i); }
Matrix& operator*= (double);
valarray<double>& array() { return *v; };
};
#endif
the .cpp file:
#include "array2D.h"
slice_array<double> zeile (size_t i)
{
return (*v)(slice(i, d1, d2));
}
inline Slice_iter<double> Matrix::zeile(size_t i)
{
return Slice_iter<double>(v, slice(i, d1, d2));
}
inline Cslice_iter<double> Matrix::zeile(size_t i) const
{
return Cslice_iter<double>(v, slice(i, d1, d2));
}
inline Slice_iter<double> Matrix::spalte(size_t i)
{
return Slice_iter<double>(v, slice(i*d2, d2, 1));
}
inline Cslice_iter<double> Matrix::spalte(size_t i) const
{
return Cslice_iter<double>(v, slice(i*d2, d2, 1));
}
Matrix::Matrix(size_t x, size_t y)
{
d1 = x;
d2 = y;
v = new valarray<double>(x*y);
}
double& Matrix::operator()(size_t x, size_t y)
{
return zeile(x)[y];
}
double Matrix::operator()(size_t x, size_t y) const
{
return zeile(x)[y];
}
double mul(const valarray<double>& v1, const valarray<double>& v2)
{
double res = 0;
for (int i = 0; i < v1.size(); i++)
res += v1[i] * v2[i];
return res;
}
valarray<double> operator*(const Matrix& m, const valarray<double>& v)
{
valarray<double> res(m.dim1());
for (int i = 0; i < m.dim1(); i++)
res(i) = mul(m.zeile(i), v);
return res;
}
Matrix& Matrix::operator*=(double d)
{
(*v) *= d;
return *this;
}
Error messages:
In file included from c:\dev\dev-c++\arrhenius\array2d.cpp:1:
c:/dev/dev-c++/arrhenius/array2D.h:12: return type specification for
constructor invalid
c:/dev/dev-c++/arrhenius/array2D.h:20: syntax error before `('
c:/dev/dev-c++/arrhenius/array2D.h:21: syntax error before `('
c:/dev/dev-c++/arrhenius/array2D.h:23: syntax error before `('
c:/dev/dev-c++/arrhenius/array2D.h:24: syntax error before `('
c:/dev/dev-c++/arrhenius/array2D.h:29: syntax error before `operator'
c:/dev/dev-c++/arrhenius/array2D.h:30: syntax error before `operator'
c:/dev/dev-c++/arrhenius/array2D.h:32: syntax error before `operator'
c:/dev/dev-c++/arrhenius/array2D.h:33: syntax error before `operator'
c:/dev/dev-c++/arrhenius/array2D.h:35: `operator *=(double)' must have an
argument of class or enumerated type
c:/dev/dev-c++/arrhenius/array2D.h:35: `operator *=(double)' must take
exactly two arguments
c:/dev/dev-c++/arrhenius/array2D.h: In function `class valarray<double> &
array()':
c:/dev/dev-c++/arrhenius/array2D.h:37: `v' undeclared (first use this
function)
c:/dev/dev-c++/arrhenius/array2D.h:37: (Each undeclared identifier is
reported only once
c:/dev/dev-c++/arrhenius/array2D.h:37: for each function it appears in.)
c:/dev/dev-c++/arrhenius/array2D.h: At top level:
c:/dev/dev-c++/arrhenius/array2D.h:38: parse error before `}'
c:\dev\dev-c++\arrhenius\array2d.cpp: In function `class slice_array<double>
zeile(unsigned int)':
c:\dev\dev-c++\arrhenius\array2d.cpp:5: `d1' undeclared (first use this
function)
c:\dev\dev-c++\arrhenius\array2d.cpp:5: `d2' undeclared (first use this
function)
c:\dev\dev-c++\arrhenius\array2d.cpp: At top level:
c:\dev\dev-c++\arrhenius\array2d.cpp:8: syntax error before `::'
c:\dev\dev-c++\arrhenius\array2d.cpp:13: syntax error before `::'
c:\dev\dev-c++\arrhenius\array2d.cpp:18: syntax error before `::'
c:\dev\dev-c++\arrhenius\array2d.cpp:23: syntax error before `::'
c:\dev\dev-c++\arrhenius\array2d.cpp: In method `double & Matrix::operator
()(unsigned int, unsigned int)':
c:\dev\dev-c++\arrhenius\array2d.cpp:37: no match for
`slice_array<double>[size_t &]'
c:\dev\dev-c++\arrhenius\array2d.cpp: In method `double Matrix::operator
()(unsigned int, unsigned int) const':
c:\dev\dev-c++\arrhenius\array2d.cpp:42: no match for
`slice_array<double>[size_t &]'
c:\dev\dev-c++\arrhenius\array2d.cpp: In function `class valarray<double>
operator *(const Matrix &, const valarray<double> &)':
c:\dev\dev-c++\arrhenius\array2d.cpp:57: no match for call to
`(valarray<double>) (int &)'
c:\dev\dev-c++\arrhenius\array2d.cpp:57: no matching function for call to
`Matrix::zeile (int &) const'
c:\dev\dev-c++\arrhenius\array2d.cpp: At top level:
c:\dev\dev-c++\arrhenius\array2d.cpp:62: no `class Matrix & Matrix::operator
*=(double)' member function declared in class `Matrix'
--
--------------------------
Horst Rößner
Postf. 1802
52205 Stolberg
02402 / 6178
0171 6455636
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net
|
|
From: Ioannis V. <no...@ya...> - 2002-02-28 13:24:44
|
> -----Original Message-----
> From: dev...@li...
> [mailto:dev...@li...] On Behalf
> Of h.r...@gm...
> Sent: Thursday, February 28, 2002 7:34 AM
> To: dev...@li...
> Subject: [Dev-C++] cannot compile matrix class
>
>
> Hello,
> I try the following example from Stroustrub "The C++
> programming language" ( the german edition), but it does not
> compile and I can't find the errors. Can everyone help me ?
> Thanks in advance greetings Horst
>
>
> the .h file:
>
> #ifndef array2D_H
> #define array2D_H
>
> #include <valarray>
#include <cstddef> // For size_t
using namespace std;
>
> class Matrix
> {
> valarray<double>* v;
> size_t d1, d2;
> public:
> Matrix (size_t x, size_t y);
> Matrix& Matrix(const Matrix&);
Constructor can't have a return value.
> Matrix& operator=(const Matrix&);
> ~Matrix();
>
> size_t size() const { return d1 * d2; }
> size_t dim1() const { return d1; }
> size_t dim2() const { return d2; }
> Slice_iter<double> zeile (size_t i);
> Cslice_iter<double> zeile (size_t i) const;
>
> Slice_iter<double> spalte (size_t i);
> Cslice_iter<double> spalte (size_t i) const;
Where are Slice_iter, e.t.c. types defined?
Ioannis
* Ioannis Vranos
* Programming pages: http://www.noicys.d2g.com
* Alternative URL: http://run.to/noicys
>
|