gpt4 book ai didi

C++ << 使用 ostream 重载以获得正确的格式

转载 作者:行者123 更新时间:2023-11-30 02:58:43 26 4
gpt4 key购买 nike

我已经开始尝试编写自己的链接列表,它可以很好地打印数字,但我使用模板来确定用于对象的类型名称。因此,除了打印对象外,我输入数据没有任何问题。这些类出现以下错误,但 Visual Studio 2010 未提供行号。我想要做的就是允许不同类型的对象以正确的格式从链接列表中输出。

error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > &
__cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,
class Customer &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAVCustomer@@@Z)
already defined in Customer.obj

图形类

//Templates
#include "LinkList.h"
#include "Node.h"

//Classes
#include "Gui.h"
#include "Customer.h"

//Libaries
#include <iostream>

//Namespaces
using namespace std;

int main(){
Customer c1("TempFirst", "TempLast");
LinkList<Customer> customerList;
customerList.insert(c1);

//Print Linklist
customerList.print();
system("pause");
return 0;
}

客户类

//Def
#pragma once

//Included Libaries
#include <string>
#include <iostream>
class Customer
{
private:
std::string firstName;
std::string lastName;
public:
Customer();
Customer(std::string sFirstName, std::string sLastName);
~Customer(void);

//Get Methods
std::string getFirstName();
std::string getLastName();

//Set Methods
void setFirstName(std::string sFirstname);
void setLastName(std::string sLastname);

//Print
};

std::ostream& operator << (std::ostream& output, Customer& customer)
{
output << "First Name: " << customer.getFirstName() << " "
<< "Last Name: " << customer.getLastName() << std::endl;
return output;
}

最佳答案

小心将函数定义放在头文件中。您要么需要内联定义,要么更好的是将其放入 .cpp 文件中。在 Customer.h 中放置一个函数原型(prototype):

// Customer.h
std::ostream& operator << (std::ostream& output, Customer& customer);

并将完整的定义放在Customer.cpp中:

// Customer.cpp
std::ostream& operator << (std::ostream& output, Customer& customer)
{
output << "First Name: " << customer.getFirstName() << " "
<< "Last Name: " << customer.getLastName() << std::endl;
return output;
}

或者,如果您确实需要头文件中的定义,则添加 inline 关键字。内联定义必须放在头文件中,并且就其性质而言,它们没有外部链接,也不会触发重复定义错误。

inline std::ostream& operator << (std::ostream& output, Customer& customer)
{
...
}

关于C++ << 使用 ostream 重载以获得正确的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com