作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模板类,一旦它得到一个 string
作为 T
和另一个Para*
作为 T
.我重载了 <<
对于 Para
.
friend ostream& operator<< (ostream &wyjscie, Para const& ex){
wyjscie << "(" << ex.wrt << ", " << ex.liczbaWystapien <<")"<< endl;
return wyjscie;
}
所以要打印它,我必须使用 cout<<*objectOfClassPara<<endl;
否则我会打印地址,但我不能为 string
做.
如何更正此代码?
T t = n->key;
//cout<<n->key<<endl;
cout<<t<<endl;
if (is_same<T, Para*>::value){
cout<<*t<<endl; //IILEGAL INDIRECTION
}
最佳答案
你的问题是if
是一个运行时 if 检查,并且所有可能的类型都必须编译,无论代码是否真的可以执行。所以当T
是string
, *
导致代码失败。
最简单的解决方案是提供一个重载的 operator<<
与指针一起使用并删除 *
:
ostream& operator<< (ostream &wyjscie, Para const* ex)
{
return wyjscie << *ex;
}
关于c++ - C++ 模板中的非法间接寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290863/
我是一名优秀的程序员,十分优秀!