我正在尝试使用运算符重载来测试一些示例,但是遇到了一些问题。我认为这些问题非常普遍,并找到了许多有用的答案,但我仍然无法运行此简单代码。
我在Mac上使用vscode,并尝试使用g ++并链接文件,但是发生相同的错误。
// test.h file
#include <iostream>
class test {
public:
int num;
test();
test(int);
test operator+ (test);
friend std::istream& operator >> (std::istream& in, test);
friend std::ostream& operator << (std::ostream& out, test);
};
// test.cpp file
#include <iostream>
#include "test.h"
test ::test(){
}
test::test(int a){
num = a;
}
test test :: operator+ (test ao){
test brandnew;
brandnew.num = num + ao.num;
return brandnew;
}
int main(){
test a(25);
test b(25);
test c;
c = a +b;
std::cout << c;
return 0;
}
我期望输出结果为50。这是错误: 架构x86_64的未定义符号: “运算符<<(std :: __ 1 :: basic_ostream>&,测试)”,引用自: _main在test-823d00.o中 ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
答案 0 :(得分:1)
这很简单,而您已声明
friend std::ostream& operator << (std::ostream& out, test);
您从未真正定义实施。您可能只想说
std::ostream& operator << (std::ostream& out, test t) {
out << t.num;
return out;
}