使用运算符重载运行一个简单示例的问题

时间:2019-06-18 01:30:10

标签: c++ gcc visual-studio-code operator-overloading

我正在尝试使用运算符重载来测试一些示例,但是遇到了一些问题。我认为这些问题非常普遍,并找到了许多有用的答案,但我仍然无法运行此简单代码。

我在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查看调用)

1 个答案:

答案 0 :(得分:1)

这很简单,而您已声明

friend std::ostream& operator << (std::ostream& out, test);

您从未真正定义实施。您可能只想说

std::ostream& operator << (std::ostream& out, test t) {
  out << t.num;
  return out;
}