| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2028 人关注过本帖
标题:请教下大家关于g++ 和 clang++ 的问题
只看楼主 加入收藏
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
结帖率:41.18%
收藏
已结贴  问题点数:20 回复次数:1 
请教下大家关于g++ 和 clang++ 的问题
程序代码:
user.hpp

#ifndef __User__
#define __User__

#include <string>

using std::string;

namespace __TrainManage__
{
    class User
    {
    private:
        string name, sex, address, tel;
        int age;

    public:

        User ();
        User (string na, string se, string ad, string te, int ag);
        User (const User & rhs);
       

        bool operator== ( User & myuser);
        const bool operator== ( const User & myuser ) const;
    };
}

#endif


user.cpp

#include "user.hpp"
namespace __TrainManage__
{
    User::User ()
    {}
    User::User (string na, string se, string ad, string te, int ag)
        : name(na), sex(se), address(ad), tel(te), age(ag) { }
    User::User (const User & rhs)
        : name(rhs.name), sex(rhs.sex), address(rhs.address), tel(rhs.tel), age(rhs.age) { }
    bool User::operator== ( User & myuser )
    {
        return name == myuser.name && sex == myuser.sex && age == myuser.age &&
                tel == myuser.tel && address == myuser.address ? 1 : 0;
    }
    const bool User::operator== ( const User & myuser ) const
    {
        return name == myuser.name && sex == myuser.sex && age == myuser.age &&
                tel == myuser.tel && address == myuser.address ? 1 : 0;
    }
}





这段代码在clang++下可以正常编译通过,而在g++下却报错:
user.cpp:8:5: error: prototype for ‘__TrainManage__::User::User(std::__cxx11::string, std::__cxx11::string, std::__cxx11::string, std::__cxx11::string, int)’ do
es not match any in class ‘__TrainManage__::User’
     User::User (string na, string se, string ad, string te, int ag)
     ^~~~
user.hpp:19:9: error: candidates are: __TrainManage__::User::User(const __TrainManage__::User&)
         User (string na, string se, string ad, string te, int ag);
         ^~~~
user.hpp:18:9: error:                 __TrainManage__::User::User(__TrainManage__::User&)
         User ();
         ^~~~
user.hpp:17:9: error:                 __TrainManage__::User::User(std::__cxx11::string, std::__cxx11::string, int, std::__cxx11::string, std::__cxx11::string)
         ^
user.cpp:6:5: error:                 __TrainManage__::User::User()
     User::User ()

而我必须将构造函数写在头文件user.hpp中,变成
#ifndef __User__
#define __User__
#include <string>
using std::string;
namespace __TrainManage__
{
    class User
    {
    private:
        string name, sex, address, tel;
        int age;
    public:
        User ()
        {}
        User (string na, string se, string ad, string te, int ag)
            : name(na), sex(se), address(ad), tel(te), age(ag) { }
        User (const User & rhs)
            : name(rhs.name), sex(rhs.sex), address(rhs.address), tel(rhs.tel), age(rhs.age) { }
      
        bool operator== ( User & myuser);
        const bool operator== ( const User & myuser ) const;
    };
}
#endif


才可以编译通过。请问下大家这个是什么原因?
搜索更多相关主题的帖子: address 
2017-06-11 09:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
g++ 7.1.0 编译没问题

我怀疑你贴的user.hpp并非你实际使用的那个
看你的错误信息:
User::User (string na, string se, string ad, string te, int ag)
User::User(std::__cxx11::string, std::__cxx11::string, int, std::__cxx11::string, std::__cxx11::string)
cpp中int参数在第五个,而hpp中在第三个,即使编译器有bug,也不可能错成这样。
2017-06-12 08:32
快速回复:请教下大家关于g++ 和 clang++ 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015823 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved