Hallo,
ich muss für eine Prüfung C++ lernen und mache dafür jetzt einige Übungen durch. Leider finde ich bei dieser Aufgabe den Fehler nicht. Ob das Programm macht was es soll, soll hier gar nicht überprüft werden. Das möchte ich selber machen. Es geht mir nur um die Syntax. Ich hoffe jemand von euch sieht was falsch ist, damit ich endlich weiter komme.
Gruß
Die Fehlermeldung:
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: class CommaProxy __thiscall MatrixT<2,3>::operator=(double)" (??4?$MatrixT@$01$02@@QAE?AVCommaProxy@@N@Z)" in Funktion "_main".
1>C:\Users\Phil\Documents\Visual Studio 2010\Projects\matrixN\Debug\matrixN.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
1>
1>Fehler beim Erstellen
Der Code:
Alles anzeigen
Alles anzeigen
Alles anzeigen
Alles anzeigen
Alles anzeigen
ich muss für eine Prüfung C++ lernen und mache dafür jetzt einige Übungen durch. Leider finde ich bei dieser Aufgabe den Fehler nicht. Ob das Programm macht was es soll, soll hier gar nicht überprüft werden. Das möchte ich selber machen. Es geht mir nur um die Syntax. Ich hoffe jemand von euch sieht was falsch ist, damit ich endlich weiter komme.
Gruß
Die Fehlermeldung:
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: class CommaProxy __thiscall MatrixT<2,3>::operator=(double)" (??4?$MatrixT@$01$02@@QAE?AVCommaProxy@@N@Z)" in Funktion "_main".
1>C:\Users\Phil\Documents\Visual Studio 2010\Projects\matrixN\Debug\matrixN.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
1>
1>Fehler beim Erstellen
Der Code:
C-Quellcode
C-Quellcode
- //MatrixT.h
- #pragma once
- #include "CommaProxy.h"
- #include <iostream>
- template <size_t R, size_t C>
- class MatrixT
- {
- public:
- double operator()(size_t row, size_t col) const;
- double& operator()(size_t row, size_t col);
- CommaProxy operator=(double value);
- private:
- double data[R][C];
- template <size_t RR, size_t CC>
- friend std::ostream& operator<<(std::ostream& os, const MatrixT <RR, CC> &m);
- };
C-Quellcode
- //MatrixT.cpp
- #include "MatrixT.h"
- #include "CommaProxy.h"
- #include <iostream>
- #include <stdexcept>
- using namespace std;
- template <size_t R, size_t C>
- double MatrixT<R,C>::operator() (size_t row, size_t col) const
- {
- if (row >= R || col >= C) throw runtime_error("Matrix error");
- return data[row][col];
- }
- template <size_t R, size_t C>
- double& MatrixT<R,C>::operator()(size_t row, size_t col)
- {
- if (row >= R || col >= C) throw runtime_error("Matrix error");
- return data[row][col];
- }
- template <size_t R, size_t C>
- CommaProxy MatrixT<R,C>::operator=(double value)
- {
- return CommaProxy(&data[0][0], &data[0][0] + R * C), value;
- }
- template <size_t RR, size_t CC>
- ostream& operator<<(ostream& os, const MatrixT<RR,CC> &m)
- {
- for (size_t r = 0; r < RR; r++) {
- os << "|";
- for (size_t c = 0; c < CC; c++) os << m(r,c) << "|";
- os << endl;
- }
- return os;
- }
Quellcode
C-Quellcode
- //CommaProxy.cpp
- #include "CommaProxy.h"
- #include <stdexcept>
- using namespace std;
- CommaProxy::CommaProxy(double *p, double *end)
- {
- this->p = p;
- this->end = end;
- }
- CommaProxy::~CommaProxy(void)
- {
- delete p;
- delete end;
- }
- CommaProxy& CommaProxy::operator,(double value)
- {
- if (p == end) throw runtime_error("Speicherüberlauf");
- *(p++) = value;
- return *this;
- }