gpt4 book ai didi

c++ - 函数运算符的 undefined reference >>

转载 作者:行者123 更新时间:2023-11-30 03:37:10 25 4
gpt4 key购买 nike

我正在定义一个抽象数据类型,当我开始定义运算符时,我遇到了这个错误,不明白为什么其他类似的项目我的运算符工作而不是这个。

事件历史.h

#ifndef __EVENTO
#define __EVENTO

#include <iostream>
#include <string>
#include <vector>

using namespace std;

/**
* @file EventoHistorico.h
* @brief T.D.A. EventoHistorico
*
* The instance of @e c its Abstract data type @c EventoHistorico is an object
* that contains a date and a colection of events associated with that date
*
* Representation:
* "date" : <"event1","event2",...>
*
* Examples:
* "1924 : Greed, Sherlock Jr., The Sea Hawk ,The Last Laugh"
* "1945 : Merge sort developed by John von Neumann"
*
*
*/

string anio;

vector<string> eventos;

vector<string> GetEvents();


friend istream& operator>> (istream& is, EventoHistorico& EH);



};
#endif

在我的 EventoHistorico.cpp 上我实现了这个函数:

istream& operator>> (istream is, EventoHistorico& EH)
{
// Obtenemos el primer año y la asignamos a la variable
// (utilizamos como separador #)
getline(is, EH.anio, '#');

// Bandera para salir del bucle cuando se llegue al salto de linea
// se utiliza este sistema para no usar break
bool salir = false;

// Recorre
while (!salir && is)
{
string event;

getline(is, event, '#');

EH.eventos.push_back(event);

//Si salto de linea
if(is.peek() == '\n')
{
//Obtenemos el siguiente caracter (salto) y salimos del bucle
is.get();
salir=true;
}
}
//referencia istream
return is;

}

然后当我编译这个项目时我得到这个错误

src/EventoHistorico.cpp: In function ‘std::istream& operator>>(std::istream, EventoHistorico&)’:
src/EventoHistorico.cpp:19:10: warning: reference to local variable ‘is’ returned [-Wreturn-local-addr]
istream& operator>> (istream is, EventoHistorico& EH)
^
g++ -o bin/pruebacronologia obj/cronologia.o obj/pruebacronologia.o obj/EventoHistorico.o
obj/cronologia.o: On function `operator>>(std::istream&, Cronologia&)':
/home/antonio/Escritorio/TDA/cronologia/src/cronologia.cpp:32: reference to `operator>>(std::istream&, EventoHistorico&)' undefined
collect2: error: ld returned 1 exit status
make: *** [bin/pruebacronologia] Error 1

最佳答案

改变这个...

istream& operator>> (istream is, EventoHistorico& EH){
return is; // not OK ! ^^--- pass by value
}

如果 is 是局部变量,则不应返回引用(当它作为参数传递时,您会复制 istream)。当 it 是引用时,您还可以返回对它的引用:

istream& operator>> (istream& is, EventoHistorico& EH)
return is; // OK ! ^^--- pass by reference
}

关于c++ - 函数运算符的 undefined reference >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321369/

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