我真的不熟悉将 .cpp 拆分为 .cpp 和 .h。
我以前使用过 .h 文件,但从未真正将 .cpp 拆分为 .cpp 和 .h。
我知道 .h 文件仅用于声明,而 .cpp 用于定义,我试图将 .cpp 拆分为 .cpp 和 .h,但出现了很多错误,所以我想知道是否有人可以帮助我编写代码。
下面的类是尚未拆分为.cpp 和.h 的类,只是为了向大家展示“之前的版本”。
TicketOrder.cpp
#include <iostream>
using namespace std;
class TicketOrder
{
private :
char type;
int quantity;
public :
friend std::ostream& operator<<(std::ostream& os, TicketOrder const& order)
{
os << " Type: " << order.type << ", Quantity: " << order.quantity;
return os;
}
//Getters
int getQuantity() const;
{
return quantity;
}
char getType() const;
{
return type;
}
//Setters
void setQuantity (int x)
{
quantity =x;
}
void setType(char y)
{
type =y;
}
};
现在,我将把上面的类拆分为一个 .cpp 和一个 .h
TicketOrder.cpp
#include <iostream>
#include "TicketOrder.h"
using namespace std;
class TicketOrder
{
//Getters
int getQuantity() const
{
return quantity;
}
char getType() const
{
return type;
}
//Setters
void setQuantity (int x)
{
quantity =x;
}
void setType(char y)
{
type =y;
}
};
TicketOrder.h
#include <iostream>
using namespace std;
class TicketOrder
{
private :
char type;
int quantity;
public :
friend std::ostream& operator<<(std::ostream& os, TicketOrder const& order)
{
os << " Type: " << order.type << ", Quantity: " << order.quantity;
return os;
}
//Getters
int getQuantity() const;
char getType() const;
//Setters
void setQuantity (int x);
void setType(char y);
};
我还有一个用于包含主类的其他类,我不会在此处包含它,因为它很长而且我认为它不重要,因为我知道我做的 .h 和 .cpp 是错误的。
当我尝试编译 main 时,它给了我这个错误:
Undefined first referenced
symbol in file
TicketOrder::getQuantity() const /var/tmp//ccaSflFG.o
TicketOrder::setType(char) /var/tmp//ccaSflFG.o
TicketOrder::setQuantity(int) /var/tmp//ccaSflFG.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
谁能帮我拆分 .h 和 .cpp?或者给我建议?我做了很多研究,但无法找出问题所在。
谢谢。
最佳答案
您的 .cpp 文件是错误的,因为它正在重新声明类,所以这是错误的。它应该是这样的:
#include <iostream>
#include "TicketOrder.h"
using namespace std;
//Getters
int TicketOrder::getQuantity() const
{
return quantity;
}
char TicketOrder::getType() const
{
return type;
}
//and so on
另外,请注意,在头文件中添加 using namespace
被认为是非常糟糕的风格。
关于c++ 如何正确地将 .cpp 拆分为 .cpp 和 .h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203512/