Проблемы запуска простого примера с использованием перегрузки операторов - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь протестировать некоторые примеры, используя перегрузку операторов, но сталкиваюсь с некоторыми проблемами.Я полагал, что эти проблемы довольно распространены и нашел много ответов, которые были полезны, но я все еще не могу заставить этот простой код работать.

Я использую vscode для Mac и пробовал использовать 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: «operator << (std :: __ 1 :: basic_ostream> &, test)», на который ссылается: _main в test-823d00.o ld: символы не найдены для архитектурыx86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)

1 Ответ

1 голос
/ 18 июня 2019

Это довольно просто, а вы объявили

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

Вы на самом деле не определили реализацию. Вы, вероятно, просто хотите сказать

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