classe non reconnue

classe non reconnue - C++ - Programmation

Marsh Posté le 02-08-2005 à 15:03:59    

Bojour,
 
Lorque je crée mon objet toto, celui-ci n'est pas reconnue
alors que dans ce fichier je fais appel à au .hpp correspondant à la définition de la classe.
TOTOClass toto(p1, p2, p3, p4, p5, p6, p7);
 
Quelqu'un aurait-il une idée sur cette erreur?

Code :
  1. \\\\\ExcelBlackScholes.cpp(55) :
  2. error C2065: 'TOTOClass' : undeclared identifier
  3. error C2146: syntax error : missing ';' before identifier 'europeanOption'
  4. error C2065: 'toto' : undeclared identifier


 
 
merci

Reply

Marsh Posté le 02-08-2005 à 15:03:59   

Reply

Marsh Posté le 02-08-2005 à 15:05:40    

Au .hpp c'est quoi ca?
Tu peux montrer ton code et la ligne avec laquelle tu compile

Reply

Marsh Posté le 02-08-2005 à 15:06:47    

(hpp par analogie avec cpp, c'est une autre extension usuelle pour les headers C++)
 
Du code !

Reply

Marsh Posté le 02-08-2005 à 15:11:05    

theshockwave a écrit :

(hpp par analogie avec cpp, c'est une autre extension usuelle pour les headers C++)
 


 
Ok

Reply

Marsh Posté le 02-08-2005 à 15:13:06    

Code :
  1. TOTOclass toto(p1, p2, p3, p4, p5, p6, p7);


 

Reply

Marsh Posté le 02-08-2005 à 15:13:55    

... Et la définition de ta classe ? Et le reste du fichier ? :o

Reply

Marsh Posté le 02-08-2005 à 15:17:20    

Code :
  1. class EuropeanOption : public SingleAssetOption {
  2.           public:
  3.             // constructor
  4.             EuropeanOption(Option::Type type, double underlying,
  5.                 double strike, Spread dividendYield, Rate riskFreeRate,
  6.                 Time residualTime, double volatility);
  7.             // accessors
  8.             double value() const;
  9.             double delta() const;
  10.             double gamma() const;
  11.             double theta() const;
  12.             double vega() const;
  13.             double rho() const;
  14.             double dividendRho() const;
  15.             Handle<SingleAssetOption> clone() const {
  16.                 return Handle<SingleAssetOption>(new EuropeanOption(*this)); }
  17.             // modifiers
  18.             void setVolatility(double newVolatility);
  19.             void setRiskFreeRate(Rate newRate);
  20.             void setDividendYield(Rate newDividendYield);
  21.             double beta() const;
  22.           private:
  23.             static const Math::CumulativeNormalDistribution f_;
  24.             double alpha() const;
  25.             double standardDeviation() const;
  26.             double D1() const;
  27.             double D2() const;
  28.             double NID1() const;
  29.             DiscountFactor dividendDiscount() const;
  30.             DiscountFactor riskFreeDiscount() const;
  31.             // declared as mutable to preserve
  32.             // the logical constness (does this word exist?) of value()
  33.             mutable double alpha_, beta_, standardDeviation_,
  34.                 D1_, D2_, NID1_;
  35.             mutable DiscountFactor dividendDiscount_, riskFreeDiscount_;
  36.         };

Reply

Marsh Posté le 02-08-2005 à 15:19:30    

J'ai envie de te répondre la même chose que ton compilateur :

error C2065: 'TOTOClass' : undeclared identifier


ou, en plus clair : "Je ne vois toujours pas de déclaration de TOTOclass"

Reply

Marsh Posté le 02-08-2005 à 15:20:17    

en fait TOTOClass=EuropeanOption

Reply

Marsh Posté le 02-08-2005 à 15:20:43    

et  
EuropeanOption europeanOption(type, underlying, strike,  
                                dividendYield, riskFreeRate,  
                                residualTime, volatility);

Reply

Marsh Posté le 02-08-2005 à 15:20:43   

Reply

Marsh Posté le 02-08-2005 à 15:34:23    

question con : tu as bien fait un include du fichier où tu as la définition de ta classe avant son instanciation ?
 
(et à l'avenir, évite d'obfusquer ton code et tes erreurs, parce que maintenant, je commence à me demander ce que je dois remettre en ordre dans tes posts :

Citation :

\\\\\ExcelBlackScholes.cpp(55) :
error C2065: 'TOTOClass' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'europeanOption'
error C2065: 'toto' : undeclared identifier

)

Reply

Marsh Posté le 02-08-2005 à 15:41:13    

yep sorry!

Code :
  1. error C2065: 'EuropeanOption' : undeclared identifier
  2. error C2146: syntax error : missing ';' before identifier 'europeanOption'
  3. error C2065: 'europeanOption' : undeclared identifier
  4. Error executing cl.exe.


 
Le #include correspondant est bien au début #include "ql/quantlib.hpp"
 
ce quantlib étant un ensemble de #include vers d'autres hpp donc europeanoption.hpp (def de la classe)

Reply

Marsh Posté le 02-08-2005 à 15:47:21    

tu es sur que ta classe n'est pas dans un namespace ?
Vu l'erreur, c'est soit le fichier qui n'est pas réellement inclu, soit un problème de résolution de portée :/

Reply

Marsh Posté le 02-08-2005 à 15:54:55    

si 2 namespaces:
 
namespace QuantLib {
 
    namespace Pricers {
 
          class EuropeanOption
 
 
et je n'ai qu'un usising namespace QuantLib quand j'instancie
 
d'où

Reply

Marsh Posté le 02-08-2005 à 15:56:26    

donc, tu dois faire :
 
Pricers::EuropeanOption europeanOption(...);
 
sinon, ca ne passera pas :)

Reply

Marsh Posté le 02-08-2005 à 16:02:44    

Code :
  1. error LNK2001: unresolved external symbol "public: virtual double __thiscall QuantLib::Pricers::SingleAssetOption::dividendRho(void)const " (?dividendRho@SingleAssetOption@Pricers@QuantLib@@UBENXZ)
  2. ExcelBlackScholes.obj :
  3. error LNK2001: unresolved external symbol "public: virtual double __thiscall QuantLib::Pricers::SingleAssetOption::rho(void)const " (?rho@SingleAssetOption@Pricers@QuantLib@@UBENXZ)
  4. ExcelBlackScholes.obj :


 
et là il me cela maintenant:
unresolved external?

Reply

Marsh Posté le 02-08-2005 à 16:22:23    

Soit tu compiles / link pas le SingleAssetOption.cpp dans ton projet, soit les fonctions membres SingleAssetOption::dividendRho() et SingleAssetOption::rho() ne sont pas implémentées.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-08-2005 à 16:23:06    

ou ne sont pas dans le namespace?

Reply

Marsh Posté le 02-08-2005 à 16:47:31    

en fait dividend_rho et rho étaient défininies dans la classe fille European et n'avait pas été déclarées =0 dans la classe mere
donc c ok
 
merci
on apprend on apprend

Reply

Marsh Posté le 02-08-2005 à 17:21:21    

slash33 a écrit :

ou ne sont pas dans le namespace?


elles ne compileraient pas alors.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-08-2005 à 17:36:49    

Tu sais avec Visual j'en déja vu des choses étranges...
Non: je retire ce que j'ai dit, tu as raison.
 
Au fait j'ai commencé à me mettre au C# avec SharpDevelop + .NET SDK
Pour la doc tu t'y prends comment? Parce que récupérer les 3 CDs de la MSDN...


Message édité par slash33 le 02-08-2005 à 17:40:01
Reply

Marsh Posté le 02-08-2005 à 17:48:05    

doc online, (très bien intégrée dans Visual Studio 2005, d'ailleurs) mais ce n'est pas vraiment le sujet ici

Reply

Marsh Posté le 02-08-2005 à 17:52:38    

Si je demande pour la doc c'est parce que mon poste de dév (at home quoi) n'est pas connecté à Internet. Alors la doc en ligne...

Reply

Marsh Posté le 02-08-2005 à 17:58:49    

Messieurs, il m'en reste une dernière
plus d'histoires de virtual=0
avez vous une idée?
 

Code :
  1. error LNK2001: unresolved external symbol "public: __thiscall QuantLib::Pricers::EuropeanOption::EuropeanOption(enum QuantLib::Option::Type,double,double,double,double,double,double)" (??0EuropeanOption@Pricers@QuantLib@@QAE@


 
et le constructeur est définit comme ceci

Code :
  1. EuropeanOption::EuropeanOption(Option::Type type, double underlying,
  2.             double strike, Spread dividendYield, Rate riskFreeRate,
  3.             Time residualTime, double volatility)
  4.   : SingleAssetOption(type, underlying, strike, dividendYield,
  5.                             riskFreeRate, residualTime, volatility),
  6.           alpha_(Null<double>()), beta_(Null<double>()),
  7.           standardDeviation_(Null<double>()), D1_(Null<double>()),
  8.           D2_(Null<double>()), NID1_(Null<double>()),
  9.           dividendDiscount_(Null<DiscountFactor>()),
  10.           riskFreeDiscount_(Null<DiscountFactor>()) {}


 
merci

Reply

Marsh Posté le 02-08-2005 à 18:03:18    

Comprend pas ton prototype c'est bien

Code :
  1. EuropeanOption::EuropeanOption(Option::Type,
  2. double, double, Spread, Rate, Time, double)

?
 
Vu que dans ton source je ne vois pas de ; -> c'est bien le code d'implémentation du constructeur? Le code de déclaration du constructeur existe-t-il?


Message édité par slash33 le 02-08-2005 à 18:05:58
Reply

Marsh Posté le 02-08-2005 à 18:11:39    

oui mais europeanoption est défini avec les 7 paramètres + d'autres datas private mutables: alpha,....

Reply

Marsh Posté le 02-08-2005 à 18:12:35    

// constructor
EuropeanOption(Option::Type type, double underlying,     double strike, Spread dividendYield, Rate riskFreeRate,     Time residualTime, double volatility);

Reply

Marsh Posté le 02-08-2005 à 18:18:27    

Non là je vois pas. Tu as essayé un rebuild all?

Reply

Marsh Posté le 02-08-2005 à 18:19:22    

Rebuild all fait
mais tjs l'erreur

Reply

Marsh Posté le 02-08-2005 à 18:22:49    

QuantLib::Option::Type et Option::Type c'est la même chose?
Je cherche là mais je séche (à part ne pas inclure le .h ou le .cpp je vois vraiment pas)


Message édité par slash33 le 02-08-2005 à 18:23:20
Reply

Marsh Posté le 02-08-2005 à 18:26:31    

il y a forcément un problème ailleurs.
 
Vérifie que tes types Spread, Rate et Time sont bien des doubles, rends explicite leur namespace d'origine pour t'assurer que le mal ne vient pas de là
 
Tu n'as vraiment pas d'autre message d'erreur ?

Reply

Marsh Posté le 02-08-2005 à 18:26:44    

Oui c la meme chose

Reply

Marsh Posté le 02-08-2005 à 18:29:43    

Dans ce cas, il faut que tu donnes plus de code, j'imagine

Reply

Marsh Posté le 02-08-2005 à 18:30:45    

autre erreur mais je pense qu'elle décole de la 1ere
 
../../../bin/RisqueCom.dll : fatal error LNK1120: 1 unresolved externals
 
je vais vérifier pour spread...

Reply

Marsh Posté le 02-08-2005 à 18:31:40    

Je ne crois pas que la remarque de morgan541 soit la réponse à ta question mais plutôt à la mienne...

Reply

Marsh Posté le 02-08-2005 à 18:32:09    

tout à fait slasjh ct pour toi

Reply

Marsh Posté le 02-08-2005 à 18:32:24    

Ah c'est une DLL? Il y aurait pas un problème de stdcall, cdecl, dllexport, dllimport... ? Désolé je suis moyen concernant les DLL.


Message édité par slash33 le 02-08-2005 à 18:33:50
Reply

Marsh Posté le 02-08-2005 à 19:07:23    

l'erreur viendrait d'un lien entre un constructeur et une DLL?

Reply

Marsh Posté le 03-08-2005 à 09:03:54    

La cible de ton projet c'est bien une DLL (RisqueCom.Dll pour être exact)?
Je vais trop pouvoir te répondre sur ce coup là, les DLL je pratique très peu.

Reply

Marsh Posté le 03-08-2005 à 09:06:55    

Ok!
 
sinon juste pour souffler un peu sur le sujet
 
Peut-on ajouter autant de projets que l'on veut à un workspace?et les faire dépendre les uns des autres...certainbs d'entre eux générant des .lib...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed