Basicaly这是我的C ++任务项目,我对C ++很新,我得到了这个错误。在main ==中注释代码的错误也不是匹配的操作数
1> Main2.obj:错误LNK2019:未解析的外部符号“class std :: basic_ostream>& __cdecl operator<<(class std :: basic_ostream>&,class Customer&)”(?? 6 @ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ std @@ AAV01 @ AAVCustomer @@@ Z)在函数“void __cdecl display(struct Node *)”中引用(?display @@ YAXPAUNode @@ @Z)
这是代码Main.cpp
#include <iostream>
#include "account.h"
#include "cheque.h"
#include "customer.h"
using namespace std;
struct Node {
Node* m_next;
Customer& m_customer;
Node(Customer& customer) : m_next(0), m_customer(customer) {}
};
// only for the 1st Node
void initNode(struct Node *head,Customer n){
head->m_customer = n;
head->m_next =NULL;
}
// apending
void addNode(struct Node *head, Customer n) {
Node *newNode = new Node(n);
newNode->m_customer = n;
newNode->m_next = NULL;
Node *cur = head;
while(cur) {
if(cur->m_next == NULL) {
cur->m_next = newNode;
return;
}
cur = cur->m_next;
}
}
void insertFront(struct Node **head, Customer n) {
Node *newNode = new Node(n);
newNode->m_customer = n;
newNode->m_next = *head;
*head = newNode;
}
//struct Node *searchNode(struct Node *head, Customer n) {
//Node *cur = head;
//while(cur) {
//if(cur->m_customer == n) return cur;
//cur = cur->m_next;
//}
//cout << "No Node " << n << " in list.\n";
//}
bool deleteNode(struct Node **head, Node *ptrDel) {
Node *cur = *head;
if(ptrDel == *head) {
*head = cur->m_next;
delete ptrDel;
return true;
}
while(cur) {
if(cur->m_next == ptrDel) {
cur->m_next = ptrDel->m_next;
delete ptrDel;
return true;
}
cur = cur->m_next;
}
return false;
}
void deleteLinkedList(struct Node **node)
{
struct Node *tmpNode;
while(*node) {
tmpNode = *node;
*node = tmpNode->m_next;
delete tmpNode;
}
}
void display(struct Node *head) {
Node *list = head;
while(list) {
cout << list->m_customer << " ";
list = list->m_next;
}
cout << endl;
cout << endl;
}
int main()
{
Customer test1("sdfs","sdf2","dsfpppsf","fdgdfg","fdgdsffg");
struct Node *newHead;
struct Node *head = new Node(test1);
Customer test2("sdsffs","sdfhhmj2","dsfhfsf","fdgdfgs","fdsggdfg");
Customer test3("sdsdfs","sdllllf2","dsfldfgsf","fdgaghdfg","fdgbvcbdfg");
Customer test4("sdgnfgfs","ssdfsdf2","dsfhjhdsf","fdbvcgdfg","fdgsfddfg");
addNode(head,test2);
display(head);
addNode(head,test3);
display(head);
insertFront(&head,test4);
display(head);
cout << "Deleting the copied list\n";
deleteLinkedList(&newHead);
display(newHead);
return 0;
}
customer.cpp中
#include "customer.h"
using namespace std;
Customer::Customer(string init_name, string init_address, string init_telephone, string init_sex, string init_dob)
{
name = init_name;
address = init_address;
telephone = init_telephone;
sex = init_sex;
dob = init_dob;
}
void Customer::showPersonDetails(void)
{
cout << "Name : "
<< name << endl;
cout << "Address : "
<< address << endl ;
cout << "Telephone : "
<< telephone << endl;
cout << "Sex : "
<< sex << endl ;
cout << "Date of Birth : "
<< dob << endl;
}
最后是customer.h
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include <iostream>
#include<string>
using namespace std;
class Customer
{
private:
//
// class members
//
string name;
string address;
string telephone;
string sex;
string dob;
public:
// Constructor
Customer(string init_name, string init_address, string init_telephone, string init_sex, string init_dob);
// a print method
void showPersonDetails(void);
void changeDetails(void);
// This operator is a friend of the class, but is NOT a member of the // class:
friend ostream& operator <<(ostream& s, Customer& a);
};
// This is the prototype for the overload
ostream& operator <<(ostream& s, Customer& a);
#endif
答案 0 :(得分:2)
在标题中,您有以下声明:
// This operator is a friend of the class, but is NOT a member of the class:
friend ostream& operator <<(ostream& s, Customer& a);
您的cpp文件中没有定义 - 您需要提供定义。
ostream& operator <<(ostream& s, Customer& a)
{
s << a.name << ... etc...
return s;
}
您遇到链接器错误的原因是因为声明存在,而不是定义。
在Main.cpp
{}} {} {{}}} {/ 1}} display
使用operator<<
Customer
void display(struct Node *head) {
Node *list = head;
while(list) {
cout << list->m_customer << " "; // this line here uses operator<< for Customer
list = list->m_next;
}
编译,因为标题中存在operator<<
,因此可以找到该符号...但在链接阶段,对象定义(<无法找到operator<<
的em> body - 因此您收到unresolved external
个链接器错误。
答案 1 :(得分:0)
您应该在Customer.cpp中为您的Customer类实现operator<<
friend ostream& operator <<(ostream& s, Customer& a)
{
s << "Name : " << a.name << endl;
s << "Address : " << a.address << endl ;
s << "Telephone : " << a.telephone << endl;
s << "Sex : " << a.sex << endl ;
s << "Date of Birth : "<< a.dob << endl;
return s;
}