C ++列表函数返回列表

时间:2017-10-26 08:59:55

标签: c++ list header

我在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;?

3 个答案:

答案 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