重载输出运算符时出现错误 c2440 错误

Posted

技术标签:

【中文标题】重载输出运算符时出现错误 c2440 错误【英文标题】:error c2440 error when overloading output operator 【发布时间】:2012-06-28 12:33:31 【问题描述】:

我正在编译以下代码并收到以下错误。如何解决这个问题?感谢您的帮助。

错误 C2079:“issline”使用未定义的类 'std::basic_istringstream<_elem>' 1> 与 1> [ 1> _Elem=字符,1> _Traits=std::char_traits, 1> _Alloc=std::allocator 1> ] 1>d:\technical\c++study\readparsing\readparsing\main.cpp(49) : 错误 C2440:“正在初始化”:无法从“std::string”转换为“int”1> 没有可以执行此操作的用户定义的转换运算符 转换,否则无法调用运算符 1>d:\technical\c++study\readparsing\readparsing\main.cpp(51):错误 C2678:二进制“>>”:未找到采用左操作数的运算符 'int' 类型(或没有可接受的转换) 1> d:\technical\c++study\readparsing\readparsing\timestamp.h(31): 可以 是 'std::istream &operator >>(std::istream &,TimeStamp &)' 1> 在尝试匹配参数列表“(int,TimeStamp)”时

我在 TimeStamp.h 中有以下代码

#ifndef __TIMESTAMP_
#define __TIMESTAMP_

#include <iostream>

struct DateTime

    unsigned int dwLowDateTime;
    unsigned int  dwHighDateTime;
;


class TimeStamp 

public:
    TimeStamp()
    
        m_time.dwHighDateTime = 0;
        m_time.dwLowDateTime = 0;
    

    TimeStamp& operator = (unsigned __int64 other)
    
        *( unsigned __int64*)&m_time = other;
        return *this;
    
private:
    DateTime        m_time;
;

std::istream& operator >> (std::istream& input, TimeStamp& timeStamp);

#endif

在 main.cpp 我有以下内容

#include <iostream>
#include <algorithm>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#include "TimeStamp.h"

std::istream& operator >> (std::istream& input, TimeStamp& timeStamp)

    // 1.
    // use regular stream operator parsing technique to parse individual integer x values (separated in the form "xxxx-xx-xx xx:xx:xx.xxx")
    // for year, month, day, hour, minute, seconds, mseconds
    unsigned int year;
    unsigned int month;
    unsigned int day;
    unsigned int hour;
    unsigned int minute;
    unsigned int seconds;
    unsigned int milliSeconds;
    char dash;
    char colon;

    input >> year >> dash >> month >> dash >> day >> hour >> colon >> minute >> colon >> seconds >> colon >> milliSeconds;

    cout << "Time stamp opeator is called " << std::endl;

    // 2.
    // code to be written.

    return input;




int main () 

    std::string dateTime = "2012-06-25 12:00:10.000";

    TimeStamp myTimeStamp;

    std::istringstream issline(dateTime);

    issline >> myTimeStamp;


   return 0;

【问题讨论】:

这是作业吗?如果是这样,那很好,我们只是想知道。请这样标记它。 不,这不是家庭作业。我正在开发项目,这只是我必须做的代码的一部分,所以我添加了要编写的代码。 【参考方案1】:

我认为你需要#include &lt;sstream&gt; 才能使用istringstream

【讨论】:

【参考方案2】:

你需要

#include <sstream>

在 main.cpp 中。错误消息说您正在使用已(转发)声明但未定义的类。通常这意味着您缺少一个包含。

请注意,#include &lt;iosfwd&gt; 在 TimeStamp.h 中就足够了,而不是 #include &lt;iostream&gt;

【讨论】:

以上是关于重载输出运算符时出现错误 c2440 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用重载加法运算符时出现内存错误

在 Visual Studio 2019 中使用枚举作为模板参数时出现错误 C2440 和 C2973

使用 Spread 运算符时出现 TypeScript 错误?

在flutter firestore中使用.data []时出现“未定义运算符'[]'”错误

在运行时出现此错误“用于空值的空检查运算符”

使用 Python 3.4.3 时出现错误“无法分配给运算符”