2012-11-29 14 views
6

Quando provo a creare un oggetto, ottengo un errore LNK2001 in Visual Studio, si tratta di un problema con il costruttore, poiché penso che la modifica del costruttore modifichi l'errore.Errore linker LNK2001

Customer bob("Bob", "25 Bob Lane", "01bob82", "M", "bob/bob/bob"); 

Questa linea dà questo errore:

Error 1 error LNK2001: unresolved external symbol "public: __thiscall 
Customer::Customer(class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> >)" ([email protected]@[email protected][email protected][email protected]@[email protected]@V? 
[email protected]@[email protected]@[email protected]@[email protected]) D:\Dropbox\Work\C++\C++ Assignment\C++ 
Assignment\driver.obj 

classe Cliente che contiene il costruttore:

#pragma once 
#include "l_list.h" 
#include "Account.h" 
#include <string> 

using namespace std; 

class Customer 
{ 
private: 
    l_list<Account> accounts; 
    string name; 
    string address; 
    string telNo; 
    string sex; 
    string dob; 

public: 
    Customer(string name, string address, string telNo, string sex, string dob) 
    { 
     Customer::name = name; 
     Customer::address = address; 
     Customer::telNo = telNo; 
     Customer::sex = sex; 
     Customer::dob = dob; 
    } 

    void createAccount() 
    { 
     cout << "What type of account?"; 

    } 

}; 
+0

Ciò significa in genere che si include la versione errata del file di intestazione o il collegamento con la versione errata della libreria di runtime. I percorsi INCLUDE e LIB dovrebbero puntare alla stessa versione dell'SDK. – Flot2011

+0

Si tratta di un errore del linker. Quindi, sembra che il tuo progetto non includa 'Customer.cpp'. O stai usando 'class Customer' tramite una vecchia (o errata) libreria. – qehgt

risposta

2

cosa c'è là sembra OK per me. Controlla altre cose, ad esempio assicurati che i tuoi spazi dei nomi siano corretti, o che non ci sia un'altra definizione/cliente "in conflitto", ecc. Prova a commentare grandi sezioni di codice o riduci il codice in un piccolo caso di test.

+0

Sei sicuro che sia tutto a posto? Poiché chiama Customer :: name, sembra che dovrebbe essere un riferimento statico, ma non lo è. Dovrebbe chiamare Customer (string _name), e quindi init name con _name, invece se l'ho letto correttamente. – SinisterMJ

+0

sì va bene, in pratica sta dicendo di usare lo spazio dei nomi dell'oggetto 'Cliente' ... anche se personalmente non lo farei in quel modo, userei' this-> nome = nome' o assegnarlo come 'Cliente (stringa nome ...): nome (nome) ... {} ' – mark

6

Se si dispone di errore di collegamento, quindi sintatticamente il codice è OK altrimenti si otterranno errori del compilatore.

Cosa si dovrebbe controllare (o aggiungere) è percorso nella Dipendenze proprietà del progetto che utilizza classe Cliente. In VS puoi trovarlo "Proprietà progetto-> Proprietà di configurazione-> Linker-> Input-> Dipendenze aggiuntive". Sembra che il linker non riesca a trovare la libreria esterna con l'implementazione del cliente. Puoi compilare correttamente il tuo progetto perché tutti #include sono corretti ma non riesci a raggiungere il livello di collegamento solo a causa delle dipendenze.

1

Ho riscontrato esattamente lo stesso problema. Ho risolto il problema:

Utilizzare #include<string> anziché #include "string.h" nel file che chiama il costruttore Customer.

1

Ho avuto lo stesso errore. Si è scoperto che una funzione necessaria è stata commentata. Quando ho decommentato questa funzione, l'errore è scomparso.

Problemi correlati