Domanda

Ho compilato la libreria aritmetica degli interi a precisione infinita NTL per C++, utilizzando Microsoft Visual Studio 2008.Ho fatto come spiegato, su questo sito, utilizzando l'interfaccia di Visual Studio, anziché dal prompt dei comandi.In realtà preferirei farlo dal prompt dei comandi, ma non ero sicuro di come farlo.

Ad ogni modo, ho compilato la libreria e ora voglio compilare un programma utilizzando la libreria, dal prompt dei comandi.Il programma che sto cercando di compilare è stato testato su un sistema Linux, dove lo compilo con quanto segue

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include mpqs.cpp main.cpp -o main -L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl -L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm

Non importa la roba gmp, non l'ho installata su Windows.È puramente una cosa opzionale che renderà la NTL più veloce.Comunque funziona bene su Linux.Ora su Windows scrivo quanto segue

cl /EHsc /I D:\Downloads\WinNTL-5_5_2\include mpqs.cpp main.cpp /link /LIBPATH:"D:\Documents\Visual Studio 2008\Projects\ntl\Debug"

Ma ciò si traduce nei seguenti errori:

mpqs.cpp
mpqs.cpp(38) : error C2039: 'find_smooth_vals' : is not a member of 'QS'
        d:\desktop\qs\mpqs.h(12) : see declaration of 'QS'
mpqs.cpp(41) : error C2065: 'M' : undeclared identifier
mpqs.cpp(41) : error C2065: 'n' : undeclared identifier
mpqs.cpp(42) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(42) : error C2228: left of '.size' must have class/struct/union
        type is ''unknown-type''
mpqs.cpp(43) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(44) : error C2065: 'qx_table' : undeclared identifier
mpqs.cpp(44) : error C3861: 'test_smoothness': identifier not found
mpqs.cpp(45) : error C2065: 'smooth_indices' : undeclared identifier
mpqs.cpp(45) : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
main.cpp
Generating Code...

È come se il mio file mpqs.h non fosse incluso nel processo di compilazione?Inoltre non capisco perché si lamenta di .push_back() per un tipo vettoriale?

L'aiuto è molto apprezzato!

È stato utile?

Soluzione

mpqs.h viene sicuramente incluso poiché l'output ti chiede di fare riferimento ad esso.

Visto che MPQS.h non sembra essere incluso nella libreria NTL...l'hai scritto tu?Se sì, puoi postare il codice?

Inoltre, non dovresti includere il file della libreria da qualche parte nella tua build?

Modificare:Non esiste una funzione find_smooth_values, quindi perché dovresti aspettarti che MSVC la trovi?Non sono sicuro del motivo per cui viene compilato sotto GCC, ma ovviamente manca.Immagino che gli altri errori siano causati da questo.Gli errori ti dicono cose.Dovresti ascoltarli.

push_back non riesce perché non sa quale sia il tipo in cui stai tentando di eseguire push_back.Anche questo è probabilmente causato dal fatto che find_smooth_values ​​non esiste.Prova ad aggiungere il prototipo della funzione nella classe QS.Questo potrebbe risolvere tutti i tuoi problemi.

Per quanto riguarda la libreria, non potrà utilizzare la libreria finché la compilazione non avrà esito positivo.Quindi non preoccuparti di questo per ora.Entra e correggi gli errori segnalati da MSVC!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top