我在ssservice.h中有两个类:
class ssverbindungsdaten
{
public:
ssverbindungsdaten();
~ssverbindungsdaten();
int id;
string test;
};
class softswitch{
public:
softswitch();
~softswitch();
list<ssverbindungsdaten> holeAlleRohdaten();
};
我的ssservice.ccp:
list<ssverbindungsdaten> softswitch::holeAlleRohdaten(){
//ssverbindungsdaten * ssv = new ssverbindungsdaten;
list<ssverbindungsdaten> *listTmp = new list<ssverbindungsdaten>;
return *listTmp;
}
我的main.cpp:
int main(int argc, char *argv[])
{
//TODO: Mulithreading
std::cout << "Starte ...";
softswitch *ss = new softswitch;
list<ssverbindungsdaten> *liSSVVerbinngsdaten = new list<ssverbindungsdaten>();
liSSVVerbinngsdaten = ss->holeAlleRohdaten();
return 0;
}
但是main.cpp中有一个错误:
cannot convert ‘std::__cxx11::list<ssverbindungsdaten>’
to ‘std::__cxx11::list<ssverbindungsdaten>*’
in assignment
liSSVVerbinngsdaten = ss->holeAlleRohdaten();
应该是
列表&#34; holeAlleRohdaten&#34;应该是一个lsit,包含所有类&#34; ssverbindungsdaten&#34;。
我可以稍后通过&#34; liSSVVerbinngsdaten&#34;在main.cpp中,获取所有类&#34; ssverbindungsdaten&#34;使用值(int id,string test)。
为什么我不能单独列出&#34; liSSVVerbinngsdaten&#34; to&#34; ss-&gt; holeAlleRohdaten&#34;?
答案 0 :(得分:3)
list<ssverbindungsdaten> *listTmp = new list<ssverbindungsdaten>;
&#34; new&#34; c ++中的关键字实际上分配了一个新指针,因此您手动分配一个指向ssverbindungsdaten对象列表的指针。 如果要创建类或列表的默认实例,只需使用
list<ssverbindungen> listTmp;
编辑:同时停止使用德语编写和大写您的班级名称
答案 1 :(得分:1)
如果你跳过所有new
和指针,代码将很多更简单:
int main(int argc, char *argv[])
{
//TODO: Mulithreading
std::cout << "Starte ...";
softswitch ss;
list<ssverbindungsdaten> liSSVVerbinngsdaten = ss.holeAlleRohdaten();
return 0;
}
C ++完全不像Java或C#。 list
类将在内部处理所有堆分配。你不必这样做。
答案 2 :(得分:1)
你应该做别人对指针,智能指针,命名等的评价......
但你的错误是
liSSVVerbinngsdaten = ss->holeAlleRohdaten();
liSSVVerbinngsdaten
是指向列表的指针,ss->holeAlleRohdaten()
返回列表。您可以通过返回指针来修复程序
ssservice.h:
class ssverbindungsdaten
{
public:
ssverbindungsdaten();
~ssverbindungsdaten();
int id;
string test;
};
class softswitch{
public:
softswitch();
~softswitch();
list<ssverbindungsdaten>* holeAlleRohdaten();
};
ssservice.ccp:
list<ssverbindungsdaten>* softswitch::holeAlleRohdaten(){
//ssverbindungsdaten * ssv = new ssverbindungsdaten;
list<ssverbindungsdaten> *listTmp = new list<ssverbindungsdaten>;
return listTmp;
}
main.cpp中:
int main(int argc, char *argv[])
{
//TODO: Mulithreading
std::cout << "Starte ...";
softswitch *ss = new softswitch;
list<ssverbindungsdaten> *liSSVVerbinngsdaten = new list<ssverbindungsdaten>();
delete liSSVVerbinngsdaten;
liSSVVerbinngsdaten = ss->holeAlleRohdaten();
delete softswitch;
delete liSSVVerbinngsdaten;
return 0;
}
这个答案只是为了解错误。正如其他人所说,你应该避免使用原始指针并使用智能指针。如果你使用原始指针,你应该记住每个new
属于delete
。