gpt4 book ai didi

c++ - C++ 模板中的非法间接寻址

转载 作者:行者123 更新时间:2023-11-28 00:45:49 26 4
gpt4 key购买 nike

我有一个模板类,一旦它得到一个 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 检查,并且所有可能的类型都必须编译,无论代码是否真的可以执行。所以当Tstring , *导致代码失败。

最简单的解决方案是提供一个重载的 operator<<与指针一起使用并删除 * :

ostream& operator<< (ostream &wyjscie, Para const* ex)
{
return wyjscie << *ex;
}

关于c++ - C++ 模板中的非法间接寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com