2011-05-09 143 views
3

我有一个持有对stringstream的引用的类(用作整个应用程序日志)。如何将文本添加到引用的字符串流?运算符<<和std :: stringstream引用?

为例(因为我不能在这里张贴实际源...)
主要

stringstream appLog; 
RandomClass myClass; 
..... 
myClass.storeLog(&applog); 
myClass.addText("Hello World"); 
cout << appLog.str().c_str() << endl; 

RandomClass CPP

void RandomClass::storeLog(stringstream *appLog) 
{ 
    m_refLog = appLog; 
} 

void RandomClass::addText(const char text[]) 
{ 
    m_refLog << text; //help here...? 
} 

我使用的是发现了以下错误在我真正的应用程序非常类似于上面的设置和方法结构。 error C2296: '<<' : illegal, left operand has type 'std::stringstream *'
error C2297: '<<' : illegal, right operand has type 'const char [11]'

我知道错误是因为我使用的引用,并仍试图做“< <”,但怎么回事我该怎么办呢? m_refLog-><< ???

回答

7

去参考指针第一

void RandomClass::addText(const char text[]) 
{ 
    if (m_refLog != NULL) 
     (*m_refLog) << text;  
} 

在构造函数中,初始化构件指针用NULL字符串流

RandomClass::RandomClass() : m_refLog(NULL) 
{ 
... 
} 
+1

更好地检查它是否为空,并在构造函数中将它初始化为null。 – Benoit 2011-05-09 13:02:04

+0

@Benoit更新 – asami 2011-05-09 13:17:45

2

它看起来像你的m_refLog成员是StringStream *(即一个指针,TO-StringStream),而不是一个StringStream(或StringStream &,这是你的编译错误的来源。

2

你有一个指针,而不是引用。将其解引用以获取流本身。

(回想一下,ptr->foo()相当于(*ptr).foo()

我也建议你的函数接受const std::string&,而不是指向C风格char缓冲区。

而您的示例中的.c_str()是多余的。

void RandomClass::addText(const std::string& text) { 
    (*m_refLog) << text; 
} 
相关问题