2012-11-29 59 views
6

Khi tôi cố gắng tạo đối tượng tôi nhận được lỗi LNK2001 trong Visual Studio, đó là vấn đề với hàm tạo mà tôi nghĩ vì thay đổi hàm tạo thay đổi lỗi.Lỗi liên kết LNK2001

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

Dòng này cho lỗi này:

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 

lớp khách hàng có chứa các nhà xây dựng:

#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

Điều này thường có nghĩa là bạn đang bao gồm phiên bản sai của tệp tiêu đề hoặc liên kết với phiên bản sai của thư viện thời gian chạy. Đường dẫn INCLUDE và LIB của bạn sẽ trỏ đến cùng một phiên bản SDK. – Flot2011

+0

Đó là lỗi liên kết. Vì vậy, có vẻ như dự án của bạn không bao gồm 'Customer.cpp'. Hoặc bạn đang sử dụng 'lớp khách hàng' thông qua thư viện cũ (hoặc sai). – qehgt

Trả lời

2

gì có vẻ OK với tôi. Kiểm tra những thứ khác, như đảm bảo không gian tên của bạn đúng hoặc không có định nghĩa khác "Xung đột" của khách hàng, v.v. Hãy thử nhận xét các phần lớn mã hoặc giảm mã của bạn thành một trường hợp thử nghiệm nhỏ.

+0

Bạn có chắc chắn điều này không? Kể từ khi ông gọi khách hàng :: tên, điều này có vẻ như nó phải là một tham chiếu tĩnh, nhưng nó không phải là. Anh ta nên gọi Customer (string _name), và sau đó init name với _name thay vào đó nếu tôi đọc nó một cách chính xác. – SinisterMJ

+0

vâng, về cơ bản nó nói sử dụng không gian tên của đối tượng 'Customer' ... mặc dù cá nhân tôi không làm theo cách đó, tôi sẽ sử dụng' this-> name = name' hoặc gán nó như 'Customer (string) name ...): name (name) ... {} ' – mark

6

Nếu bạn có lỗi liên kết thì cú pháp mã của bạn là OK nếu không bạn sẽ gặp lỗi trình biên dịch.

Những gì bạn nên kiểm tra (hoặc thêm) là đường dẫn trong thuộc tính Phụ thuộc của dự án sử dụng lớp Khách hàng. Trong VS bạn có thể tìm thấy nó "Project Properties-> Configuration Properties-> Linker-> Input-> Additional Dependencies". Dường như liên kết không thể tìm thấy thư viện bên ngoài với việc triển khai Khách hàng. Bạn có thể biên dịch thành công dự án của mình vì tất cả #include đều đúng nhưng bạn không thành công trong giai đoạn liên kết chỉ vì phụ thuộc.

1

Tôi gặp phải sự cố tương tự. Đây là cách tôi đã khắc phục:

Sử dụng #include<string> thay vì #include "string.h" trong tệp gọi số Customer hàm tạo.

1

Tôi đã gặp lỗi tương tự. Nó bật ra rằng một chức năng cần thiết đã được nhận xét ra. Khi tôi uncommented chức năng này, lỗi biến mất.

Các vấn đề liên quan