Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ wxWidgets-如何不将任何内容推回wxVector?_C++_Wxwidgets - Fatal编程技术网

C++ wxWidgets-如何不将任何内容推回wxVector?

C++ wxWidgets-如何不将任何内容推回wxVector?,c++,wxwidgets,C++,Wxwidgets,我有一个应用程序,用户可以将文件插入wxDataViewListCtrl,并有一个数据库来存储有关文件的所有信息。我有一个名为LoadDatabase()的函数,当用户关闭时,将数据库加载回应用程序,然后重新启动应用程序,如下所示 wxVector<wxVector<wxVariant>> Database::LoadDatabase(wxVector<wxVector<wxVariant>>& vecSet, wxTreeCtrl&

我有一个应用程序,用户可以将文件插入
wxDataViewListCtrl
,并有一个数据库来存储有关文件的所有信息。我有一个名为
LoadDatabase()
的函数,当用户关闭时,将数据库加载回应用程序,然后重新启动应用程序,如下所示

wxVector<wxVector<wxVariant>> Database::LoadDatabase(wxVector<wxVector<wxVariant>>& vecSet, wxTreeCtrl& favorite_tree, wxTreeItemId& favorite_item, wxTreeCtrl& trash_tree, wxTreeItemId& trash_item)
{
    try
    {
        if (sqlite3_open("Samples.db", &m_Database) != SQLITE_OK)
        {
            wxLogDebug("Error opening DB");
            throw sqlite3_errmsg(m_Database);
        }

        std::string load = "SELECT FAVORITE, FILENAME, SAMPLEPACK, TYPE, \
                            CHANNELS, LENGTH, SAMPLERATE, BITRATE, TRASHED \
                            FROM SAMPLES;";

        rc = sqlite3_prepare_v2(m_Database, load.c_str(), load.size(), &m_Stmt, NULL);

        if (rc == SQLITE_OK)
        {
            int row = 0;

            while (SQLITE_ROW == sqlite3_step(m_Stmt))
            {
                wxLogDebug("Record found, fetching..");

                int c1 = sqlite3_column_int(m_Stmt, 0);
                wxString c2 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 1))));
                wxString c3 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 2))));
                wxString c4 = std::string(reinterpret_cast<const char *>(sqlite3_column_text(m_Stmt, 3)));
                int c5 = sqlite3_column_int(m_Stmt, 4);
                int c6 = sqlite3_column_int(m_Stmt, 5);
                int c7 = sqlite3_column_int(m_Stmt, 6);
                int c8 = sqlite3_column_int(m_Stmt, 7);
                int c9 = sqlite3_column_int(m_Stmt, 8);

                wxVector<wxVariant> vec;

                if (c1 == 1)
                {
                    vec.push_back(true);
                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d",c5));
                    vec.push_back(wxString::Format("%d",c6));
                    vec.push_back(wxString::Format("%d",c7));
                    vec.push_back(wxString::Format("%d",c8));

                    favorite_tree.AppendItem(favorite_item, c2);
                }
                else if (c9 == 1)
                {
                    vec.push_back(false);
                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d",c5));
                    vec.push_back(wxString::Format("%d",c6));
                    vec.push_back(wxString::Format("%d",c7));
                    vec.push_back(wxString::Format("%d",c8));

                    trash_tree.AppendItem(trash_item, c2);
                }
                else
                {
                    vec.push_back(false);
                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d",c5));
                    vec.push_back(wxString::Format("%d",c6));
                    vec.push_back(wxString::Format("%d",c7));
                    vec.push_back(wxString::Format("%d",c8));
                }

                vecSet.push_back(vec);

                row++;
            }
        }
        else
        {
            wxMessageDialog* msgDialog = new wxMessageDialog(NULL, "Error! Cannot load data from table.", "Error", wxOK | wxICON_ERROR);
            msgDialog->ShowModal();
            sqlite3_free(m_ErrMsg);
        }

        rc = sqlite3_finalize(m_Stmt);

        sqlite3_close(m_Database);
    }
    catch (const std::exception &exception)
    {
        wxLogDebug(exception.what());
    }

    return vecSet;
}
SampleListView
这里是
wxDataViewListCtrl
,我希望当
c9==1
不返回任何内容时,只需将该项的文件名附加到
垃圾树中即可。因为如果我将任何内容推回到
vec
,它将被添加到
SampleListView

这是我得到的错误,
我不确定我是否理解你的问题,但你的意思是这样的吗

wxVector<wxVariant> vec;

if (c9 == 1)
{
    trash_tree.AppendItem(trash_item, c2);
}
else
{
    if (c1 == 1)
    {
        vec.push_back(true);

        favorite_tree.AppendItem(favorite_item, c2);
    }
    else
        vec.push_back(false);

    vecSet.push_back(vec);
    vec.push_back(c2);
    vec.push_back(c3);
    vec.push_back(c4);
    vec.push_back(wxString::Format("%d",c5));
    vec.push_back(wxString::Format("%d",c6));
    vec.push_back(wxString::Format("%d",c7));
    vec.push_back(wxString::Format("%d",c8));
}
wxvec;
如果(c9==1)
{
垃圾树。附件项(垃圾树项,c2);
}
其他的
{
如果(c1==1)
{
向量推回(真);
favorite_树。AppendItem(favorite_项,c2);
}
其他的
向量推回(假);
vecSet.推回(vec);
矢量推回(c2);
向量推回(c3);
向量推回(c4);
vec.push_back(wxString::Format(“%d”,c5));
vec.push_back(wxString::Format(“%d”,c6));
vec.push_back(wxString::Format(“%d”,c7));
vec.push_back(wxString::Format(“%d”,c8));
}

我根据您在上面共享的代码修改了代码

wxVector<wxVector<wxVariant>> Database::LoadDatabase(wxVector<wxVector<wxVariant>>& vecSet, wxTreeCtrl& favorite_tree, wxTreeItemId& favorite_item, wxTreeCtrl& trash_tree, wxTreeItemId& trash_item)
{
    try
    {
        if (sqlite3_open("Samples.db", &m_Database) != SQLITE_OK)
        {
            wxLogDebug("Error opening DB");
            throw sqlite3_errmsg(m_Database);
        }

        std::string load = "SELECT FAVORITE, FILENAME, SAMPLEPACK, TYPE, \
                            CHANNELS, LENGTH, SAMPLERATE, BITRATE, TRASHED \
                            FROM SAMPLES;";

        rc = sqlite3_prepare_v2(m_Database, load.c_str(), load.size(), &m_Stmt, NULL);

        if (rc == SQLITE_OK)
        {
            int row = 0;

            while (SQLITE_ROW == sqlite3_step(m_Stmt))
            {
                wxLogDebug("Record found, fetching..");

                int c1 = sqlite3_column_int(m_Stmt, 0);
                wxString c2 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 1))));
                wxString c3 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 2))));
                wxString c4 = std::string(reinterpret_cast<const char *>(sqlite3_column_text(m_Stmt, 3)));
                int c5 = sqlite3_column_int(m_Stmt, 4);
                int c6 = sqlite3_column_int(m_Stmt, 5);
                int c7 = sqlite3_column_int(m_Stmt, 6);
                int c8 = sqlite3_column_int(m_Stmt, 7);
                int c9 = sqlite3_column_int(m_Stmt, 8);

                wxVector<wxVariant> vec;

                if (c9 == 1)
                {
                    trash_tree.AppendItem(trash_item, c2);
                }
                else
                {
                    if (c1 == 1)
                    {
                        vec.push_back(true);

                        favorite_tree.AppendItem(favorite_item, c2);
                    }
                    else
                        vec.push_back(false);

                    vecSet.push_back(vec);
                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d", c5));
                    vec.push_back(wxString::Format("%d", c6));
                    vec.push_back(wxString::Format("%d", c7));
                    vec.push_back(wxString::Format("%d", c8));
                }

                row++;
            }
        }
        else
        {
            wxMessageDialog* msgDialog = new wxMessageDialog(NULL, "Error! Cannot load data from table.", "Error", wxOK | wxICON_ERROR);
            msgDialog->ShowModal();
            sqlite3_free(m_ErrMsg);
        }

        rc = sqlite3_finalize(m_Stmt);

        sqlite3_close(m_Database);
    }
    catch (const std::exception &exception)
    {
        wxLogDebug(exception.what());
    }

    return vecSet;
}

所以我想它现在已经修好了。

否则(c1==0)
是无效的。至于你的问题,你不想推回哪个向量?如果你指的是
vecSet
vector,那么以后可能会出现问题,因为无论向量的实际大小如何(或者在没有实际检查的情况下假设某个固定大小),你都会增加并使用
row
。什么给了你一个错误(什么错误?)以及你想要或不想要推回什么?很抱歉,复制粘贴错误,忘记在
else
之后删除
c1==0
。是的,如果(c9==1),我不想将任何内容推回到
vecSet
,但我想
trash\u tree.AppendItem(trash\u item,c2)
@Devolus我基本上有2个
wxTreeCtrl
一个用于收藏物品,另一个用于垃圾物品
if(c1==1)
表示如果项是收藏夹,则返回向量并将该项的文件名
c2
附加到
favorite_树
,如果(c9==1)
表示项被丢弃,则不要推回任何内容,即不要将该项插入
wxDataViewListCtrl
,但是将该项目的文件名
c2
附加到
trash\u tree
中。我编辑了我的原始帖子,很抱歉,我无法正确解释问题,同时尝试不过度扩展我的帖子。你在上面分享的代码给了我同样的错误,我在原始帖子中发布了一个错误截图。你试过了吗?是的,它给出了同样的错误,我在原始帖子中发布了一个错误截图。在评论中也很难说,我在下面发布了另一个答案来展示这些变化。啊,对不起,我错过了。当然,矢量推力必须在之后出现。顺便说一句,声明
vec
的第一行可以移动到
else
的顶部。
wxVector<wxVector<wxVariant>> Database::LoadDatabase(wxVector<wxVector<wxVariant>>& vecSet, wxTreeCtrl& favorite_tree, wxTreeItemId& favorite_item, wxTreeCtrl& trash_tree, wxTreeItemId& trash_item)
{
    try
    {
        if (sqlite3_open("Samples.db", &m_Database) != SQLITE_OK)
        {
            wxLogDebug("Error opening DB");
            throw sqlite3_errmsg(m_Database);
        }

        std::string load = "SELECT FAVORITE, FILENAME, SAMPLEPACK, TYPE, \
                            CHANNELS, LENGTH, SAMPLERATE, BITRATE, TRASHED \
                            FROM SAMPLES;";

        rc = sqlite3_prepare_v2(m_Database, load.c_str(), load.size(), &m_Stmt, NULL);

        if (rc == SQLITE_OK)
        {
            int row = 0;

            while (SQLITE_ROW == sqlite3_step(m_Stmt))
            {
                wxLogDebug("Record found, fetching..");

                int c1 = sqlite3_column_int(m_Stmt, 0);
                wxString c2 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 1))));
                wxString c3 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 2))));
                wxString c4 = std::string(reinterpret_cast<const char *>(sqlite3_column_text(m_Stmt, 3)));
                int c5 = sqlite3_column_int(m_Stmt, 4);
                int c6 = sqlite3_column_int(m_Stmt, 5);
                int c7 = sqlite3_column_int(m_Stmt, 6);
                int c8 = sqlite3_column_int(m_Stmt, 7);
                int c9 = sqlite3_column_int(m_Stmt, 8);

                wxVector<wxVariant> vec;

                if (c9 == 1)
                {
                    trash_tree.AppendItem(trash_item, c2);
                }
                else
                {
                    if (c1 == 1)
                    {
                        vec.push_back(true);

                        favorite_tree.AppendItem(favorite_item, c2);
                    }
                    else
                        vec.push_back(false);

                    vecSet.push_back(vec);
                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d", c5));
                    vec.push_back(wxString::Format("%d", c6));
                    vec.push_back(wxString::Format("%d", c7));
                    vec.push_back(wxString::Format("%d", c8));
                }

                row++;
            }
        }
        else
        {
            wxMessageDialog* msgDialog = new wxMessageDialog(NULL, "Error! Cannot load data from table.", "Error", wxOK | wxICON_ERROR);
            msgDialog->ShowModal();
            sqlite3_free(m_ErrMsg);
        }

        rc = sqlite3_finalize(m_Stmt);

        sqlite3_close(m_Database);
    }
    catch (const std::exception &exception)
    {
        wxLogDebug(exception.what());
    }

    return vecSet;
}
                wxVector<wxVariant> vec;

                if (c9 == 1)
                {
                    trash_tree.AppendItem(trash_item, c2);
                }
                else
                {
                    if (c1 == 1)
                    {
                        vec.push_back(true);

                        favorite_tree.AppendItem(favorite_item, c2);
                    }
                    else
                        vec.push_back(false);

                    vec.push_back(c2);
                    vec.push_back(c3);
                    vec.push_back(c4);
                    vec.push_back(wxString::Format("%d", c5));
                    vec.push_back(wxString::Format("%d", c6));
                    vec.push_back(wxString::Format("%d", c7));
                    vec.push_back(wxString::Format("%d", c8));

                    vecSet.push_back(vec);
                }