2016-06-24 2 views
0

У меня есть несколько функций с переключателями, использующими ostreams, чтобы указать точный тип шаблона для объекта для печати. НО как-то, когда я использую вложенные функции, дополнительный адрес появляется в потоке вывода.Ostream output дает дополнительный адрес при использовании вложенных функций

Пример кода:

#include <iostream> 

using namespace std; 


ostream & tmp2(ostream & in) 
{ 
    return in << "out"; 
} 

ostream & tmp(ostream & in) 
{ 
    return in << tmp2(in); 
} 

int main(int argc, char** argv) 
{ 
    int t = 2; 
    switch (t) 
    { 
     case 2: 
     std::cout << tmp; 
    } 
    return 0; 
} 

ВЫВОД: "out0x600e08"

какие-либо идеи, почему это и как это предотвратить?

+0

Вы хотите 'станд :: COUT << TMP (КИН);'. –

+0

Ваш код дал мне [компилировать ошибку] ​​(http://melpon.org/wandbox/permlink/19CciuvkFMECj4yc). Каков ваш компилятор? – MikeCAT

+1

@ πάνταῥεῖ Нет, для функции 'tmp()' потребуется один аргумент. – MikeCAT

ответ

1
ostream & tmp(ostream & in) 
{ 
    return in << tmp2(in); 
} 

Это эквивалентно:

ostream & tmp(ostream & in) 
{ 
    tmp2(in); 
    in << in; // This line causes the extra output. 
    return in; 
} 

Вы, вероятно, имел в виду использовать:

ostream & tmp(ostream & in) 
{ 
    return tmp2(in); 
} 
+0

Yup it was this this! благодаря – Ambrase

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