Newsgroup: it.comp.programmare.win32
Titolo: linking

Salve a tutti. Probabilmente avrete letto tanti post come questo, perchè
credo che il mio problema sia abbastanza comune.... mi scuso con voi, ma ho
cercato la soluzione in rete ma non sono riuscita a trovarla.
Spero riusciate ad aiutarmi.
Ho appena cominciato a programmare in c++ (uso Visual C++ 6.0) ed ho fatto
questo semplice programma, formato da tre file:
-------------Vector.h-------------------------
class Vector  // specifica della classe Vector
{
public:
  Vector( double x, double y, double z );
  double x();
  double y();
  double z();
  double r();
  double phi();
  double theta();
private:
  double x_, y_, z_;
};
------------------Vector.cpp---------------
#include "Vector.h"
// implementazione della classe Vector
Vector::Vector( double x, double y, double z ) :
  x_(x), y_(y), z_(z)
{
}
double Vector::x()
{
  return x_;
}
double Vector::r()
{
  return sqrt(x_*x_ + y_*y_ + z_*z_);
}
-------------------programma.cpp--------------------
#include "Vector.h"
#include <iostream.h>
// programma utente della classe vector
int main()
{
  Vector v(1, 1, 0);
  cout << "v = ("
       << v.x() << ","
       << v.y() << ","
       << v.z() << ")" << endl;
  cout << "r = " << v.r();
  cout << "theta = " << v.theta() << endl;
  return 0;
}
Non ci sono problemi nella compilazione, ma quando vado a fare il build
incontro questi errori:
--------------------Configuration: programma - Win32
Debug--------------------
Linking...
programma.obj : error LNK2001: unresolved external symbol "public: double
__thiscall Vector::theta(void)" (?theta@Vector@@QAENXZ)
programma.obj : error LNK2001: unresolved external symbol "public: double
__thiscall Vector::r(void)" (?r@Vector@@QAENXZ)
programma.obj : error LNK2001: unresolved external symbol "public: double
__thiscall Vector::x(void)" (?x@Vector@@QAENXZ)
programma.obj : error LNK2001: unresolved external symbol "public: double
__thiscall Vector::y(void)" (?y@Vector@@QAENXZ)
programma.obj : error LNK2001: unresolved external symbol "public: double
__thiscall Vector::z(void)" (?z@Vector@@QAENXZ)
programma.obj : error LNK2001: unresolved external symbol "public:
__thiscall Vector::Vector(double,double,double)" (??0Vector@@QAE@NNN@Z)
Debug/programma.exe : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.
programma.exe - 7 error(s), 0 warning(s)
credo sia un problema di settaggio.
Le mie librerie in Program->Settings->Link->object library modules sono:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
Qualcuno può aiutarmi? Vi prego!
Grazie
Banshee

 
no no quelle librerie van bene così
ho compilato il tuo programma e sulla mia piattaforma VisualC++ 6.0 il 
linker mi dice giustamente
main.obj : error LNK2001: unresolved external symbol "public: double 
__thiscall Vector::theta(void)" (?theta@Vector@@QAENXZ)
main.obj : error LNK2001: unresolved external symbol "public: double 
__thiscall Vector::y(void)" (?y@Vector@@QAENXZ)
main.obj : error LNK2001: unresolved external symbol "public: double 
__thiscall Vector::z(void)" (?z@Vector@@QAENXZ)
Debug/vector.exe : fatal error LNK1120: 3 unresolved externals
perché
When using C++, make sure that you include the implementation of a 
specific function for a class and not just a prototype in the class 
definition.
Having just a function prototype will allow the compiler to continue 
without error, but the linker will not be able to resolve your call to 
an address because there is no function code or variable space reserved. 
You will not see this error until you create an actual call to the 
function that the linker must resolve.
ah, mancava math.h, come già detto
spero ti aiuti
	drak

 
Aggiungi al progetto il file Vector.cpp e prova a ricompilare.
-- 
Se non conosci la netiquette o il quoting,
ti prego, prima di rispondere, leggi qui:
http://www.marco5x.net/usenet/galateo.php
http://www.marco5x.net/usenet/quoting.php

 
azz l'avevo dato per scontato :-P
ecco perché non gli dava l'errore per sqrt()! perché nn linkava per 
nulla il file vector.cpp
!!!

Grazie mille, ora č a posto.
Scusatemi ancora, ma non sapevo di dover aggiungere i file al progetto nč il
fatto che l'implementazione delle funzioni era obbligatoria.
Grazie ancora e.... alla prossima!!!
Banshee