G ++编译器错误 - 这里首先需要合成的方法 [英] G++ compiler error - Synthesized method first required here

查看:128
本文介绍了G ++编译器错误 - 这里首先需要合成的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 包含在/usr/lib/gcc/x86_64-redhat-linux/4.4的文件中。 6 /../../../../include/c ++/4.4.6/ios:39,
来自/usr/lib/gcc/x86_64-redhat-linux/4.4.6/ .. /../../../include/c++/4.4.6/ostream:40,来自/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../的
../../include/c++/4.4.6/iostream:40,从date.h获得
:15,从date.cpp获得
:13:
/ usr / lib / gcc /x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/ios_base.h:在拷贝构造函数'std :: basic_ios< char,std: :char_traits<炭> > :: basic_ios(const std :: basic_ios< char,std :: char_traits< char>&&)':
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/。 ./../../../include/c++/4.4.6/bits/ios_base.h:790:error:'std :: ios_base :: ios_base(const std :: ios_base&)'是私有
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:47:错误:在此上下文中
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:在拷贝构造函数'std :: basic_ostream< char,std :: char_traits< char> > :: basic_ostream(const std :: basic_ostream< char,std :: char_traits< char>&&)':
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/。 ./../../../include/c++/4.4.6/iosfwd:56:note:合成方法'std :: basic_ios< char,std :: char_traits< char> > :: basic_ios(const std :: basic_ios< char,std :: char_traits< char>&)&)'首先在这里需要
date.cpp:在函数'std :: ostream operator<( std :: ostream&; Date&)':
date.cpp:389:note:合成方法'std :: basic_ostream< char,std :: char_traits< char> > :: basic_ostream(const std :: basic_ostream< char,std :: char_traits< char>&)&'''首先在这里需要
make:*** [date.o]错误1

我认为这可能与我的头文件和源文件如何编译在一起,所以这里是代码:



标题:

  #ifndef DATE_H 
#define DATE_H

#include< iostream>
使用namespace std;

//基本但很长的班级代码

#endif

来源:

  //#包括< iostream> //尝试使用和不使用这种编译方式进行编译,但没有更改
#include< cassert>
#include< cstdlib>
#includedate.h//这是(date.cpp:13)
//我试过使用命名空间std,只是为了看看会发生什么,但没有改变
code>

最后,这是编译器引用的函数(date.cpp:389):

  ostream操作符<<(lt;& out,const日期&日期)
{
//天
出<< date.day;
switch(date.day)
{
案例1:
案例21:
案例31:
out<< ST;
休息;
案例2:
案例22:
out<< ND;
休息;
案例3:
案例23:
out<< RD;
休息;
默认值:
出<< TH;
休息;
}

//月
const char MONTHS [12] [10] =
{January,February,March,April ,五月,六月,
七月,八月,九月,十月,十一月,十二月};

out<< of< MONTHS [date.month-1]<< ,;

//年份
出<< date.year;

退出;
}

我在这里完全不解。我在最后一个小时搜索了一下,但找不到解决我问题的任何内容。感谢您提前提供任何帮助!

解决方案

问题是您无法返回普通的 code>。你必须返回一个引用作为参数(注意& )。

  ostream&运算符<<<<<<<<<<<>& out,const Date& date)

它不能通过复制上的 out 来创建新的 ostream 对象 return out;


Here's the error:

In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ios:39,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ostream:40,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iostream:40,
                 from date.h:15,
                 from date.cpp:13:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:47: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd: In copy constructor ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:56: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here 
date.cpp: In function ‘std::ostream operator<<(std::ostream&, Date&)’:
date.cpp:389: note: synthesized method ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’ first required here 
make: *** [date.o] Error 1

I think it may have to do with how my header and source file are compiling together so here is the code for that:

Header:

#ifndef DATE_H
#define DATE_H

#include <iostream>
using namespace std;

// basic but lengthy class code

#endif

Source:

// #include <iostream>  // tried compiling with and without this, but no change
#include <cassert>
#include <cstdlib>
#include "date.h"       // this is (date.cpp:13)
// I have tried using namespace std, just to see what would happen but nothing changed

Finally, here is the function that the compiler is referring to (date.cpp:389):

ostream operator <<(ostream &out, const Date &date)
{
    // day                                                                      
    out << date.day;
    switch (date.day)
    {
        case 1:
        case 21:
        case 31:
            out << "st";
            break;
        case 2:
        case 22:
            out << "nd";
            break;
        case 3:
        case 23:
            out << "rd";
            break;
        default:
            out << "th";
            break;
    }

    // month                                                                    
    const char MONTHS[12][10] =
    { "January", "February", "March",     "April",   "May",      "June",
        "July",    "August",   "September", "October", "November", "December"};

    out << " of " << MONTHS[date.month - 1] << ", ";

    // year                                                                     
    out << date.year;

    return out;
}

I am completely baffled here. I have Googled around for the last hour but I can't find anything that solves my problem. Thanks for any help in advance!

解决方案

The problem is that you cannot return a plain ostream. You have to return a reference to the one you received as argument (note the &).

ostream & operator <<(ostream &out, const Date &date)

The compiler complains that it cannot create a new ostream object by copying out on the line return out;.

这篇关于G ++编译器错误 - 这里首先需要合成的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆