C++ Lame算子重定义错误

C++ Lame算子重定义错误,c++,C++,对不起,这很蹩脚,但我想不出来: class Address { public: uint32_t addr; uint16_t port; public: Address(); Address(uint32_t addr, uint16_t port); Address(const Address & src); Address& operator=(const Address &src); bool isN

对不起,这很蹩脚,但我想不出来:

class Address {

public:

    uint32_t addr;
    uint16_t port;

public:
    Address();
    Address(uint32_t addr, uint16_t port);
    Address(const Address & src);
    Address& operator=(const Address &src);
    bool isNull();

    friend  std::ostream& operator<<(std::ostream& os, const Address& addr);
    friend  std::ostream& operator<<( const Address& addr, std::ostream& os);
};


 std::ostream& operator<<( std::ostream& os, const Address& addr){
    return os << " ( " << addr.addr << " : " << addr.port << " ) ";
}

 std::ostream& operator<<( const Address& addr, std::ostream& os){

    return os << addr;
 }
类地址{
公众:
uint32地址;
uint16_t端口;
公众:
地址();
地址(uint32地址、uint16端口);
地址(const地址和src);
地址和运算符=(常量地址和src);
bool为空();

friend std::ostream&operator下面的代码在gcc 4.3.2上为我编译得很好(我定义了构造函数以使其正确链接)


看看这是否对您有效,如果有效,只需回顾您的步骤,看看您的做法有何不同。

以下代码在gcc 4.3.2上对我来说编译得很好。(我定义了构造函数以使其正确链接。)

看看这对你是否有效,如果有效,只要回顾一下你的步骤,看看你做的有什么不同。

好吧,如果我包括

#include <cstdint>
#include <iostream>
#包括
#包括
在代码的开头,我可以使用
g++-c-std=c++0x Account.cpp
(g++4.4.1)编译它。

如果我包括

#include <cstdint>
#include <iostream>
#包括
#包括

在您的代码开始时,我可以使用
g++-c-std=c++0x Account.cpp
(g++4.4.1)编译它。

如果您刚刚(直接或间接)包含了
标题,是否确实包含了它
该程序可能会以这种方式运行。请注意,我认为您希望第一个访问说明符是
private
而不是
public
,否则您的
friend
语句就没用了。如果您只是(直接或间接地)包含
头,是否确实包含了
程序可能就是这样运行的。请注意,我认为您希望第一个访问说明符是
私有的
,而不是
公共的
,否则您的
朋友的
语句就没用了。
 ( 0 : 0 ) 
#include <cstdint>
#include <iostream>