Mam następujący program:
app.cpp:
[code]
#include "app.h"
#include "ortho.h"
using namespace myNam;
namespace myNam
{
app::app ()
{
}
app::~app()
{
}
int app::exec()
{
ublas::matrix<double> A(3,3);
ublas::matrix<double> Q(3,3);
ublas::matrix<double> R(3,3);
double tab[3][3] =
{
{1, 2, 3}, {1, 2, 2}, {4, 1, 3}
};
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
A(i, j) = tab[i][j];
int x = 10;
QR_Ortho_Decomposition (A);
std::cout << "Hello world!" << std::endl;
return 0;
}
}
[/code]
ortho.h
[code]
#ifndef ORTHO
#define ORTHO
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
namespace ublas = boost::numeric::ublas;
namespace myNam
{
template <class S>
int QR_Ortho_Decomposition (ublas::matrix<S> A);
template <class S>
ublas::matrix<S> ortho_projection (ublas::matrix<S> e, ublas::matrix<S> a);
}
#endif ORTHO
[/code]
ortho.cpp
[code]
#include "ortho.h"
using namespace myNam;
namespace myNam
{
template <class S>
int QR_Ortho_Decomposition (ublas::matrix<S> A)
{
// const int n = A.size1();
// const int m = A.size2();
// vector<S> *v = new vector<S>[n];
// delete v;
return 0;
}
template <class S>
ublas::matrix<S> ortho_projection (ublas::matrix<S> e, ublas::matrix<S> a)
{
return inner_prod(e,a)/inner_prod(e,e)*e;
}
}
[/code]
To nie cały kod, ale ograniczyłem się do najważniejszej części
Gdy spróbowałem skompilować program wyświetla się mnie napis:
[quote]
obj/Debug/app.o||In function myNam::app::exec()':| /home/tomasz/Dokumenty/prace/c/numer_qr_sol_ortho/app.cpp|35|undefined reference to
int myNam::QR_Ortho_Decomposition<int>(boost::numeric::ublas::matrix<int, boost::numeric::ublas::basic_row_major<unsigned int, int>, boost::numeric::ublas::unbounded_array<int, std::allocator<int> > >)'|
== Build finished: 1 errors, 0 warnings ===
[/quote]
Co robię źle? Dziwne, że codeblocks widzi odwołanie i wyświetla poprawnie auto uzupełnianie ;p