2009-12-13 2 views
1

К сожалению, это хромает, но я не могу понять:Lame оператор

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; 
} 

говорит:

../src/streamShare/types.h: In function ‘std::ostream& streamShare::operator<<(std::ostream&, const streamShare::Address&)’: 
../src/streamShare/types.h:46: error: no match for ‘operator<<’ in ‘os << " ("’ 
../src/streamShare/types.h:45: note: candidates are: std::ostream& streamShare::operator<<(std::ostream&, const streamShare::Address&) 

Может быть, это просто, что я в воскресенье похмелья ... но эй ostream& << "oihoih" должен работать !!!

+1

Уверен, что вы включили заголовок ''? Если вы просто включили (прямо или косвенно) '', то программа могла бы вести себя именно так. –

+0

Что касается абсолютно несвязанной заметки, я думаю, вы хотите, чтобы этот первый спецификатор доступа был 'private', а не' public', иначе ваш оператор 'friend' бесполезен. –

ответ

0

Ну, если я включаю

#include <cstdint> 
#include <iostream> 

в начале вашего кода, я могу скомпилировать его с помощью g++ -c -std=c++0x Account.cpp (г ++ 4.4.1).

1

Следующий код компилируется для меня на gcc 4.3.2. (Я определил конструктор, чтобы получить его, чтобы связать должным образом.)

#include <iostream> 

class Address 
{ 
public: 

    uint32_t addr; 
    uint16_t port; 

public: 
    Address() : addr(0), port(0) { } 

    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 << ") "; 
} 

int main() 
{ 
Address a; 
std::cout << a << std::endl; 
} 

Этот вывод:

(0 : 0) 

Смотрите, если это работает для вас, и если это произойдет, просто повторить ваши шаги, чтобы увидеть, что вы 'по-разному.

Смежные вопросы