簡體   English   中英

如何在 C++ 中聲明和定義 const 全局向量?

[英]How can I declare and define const global vectors in C++?

#include <iostream>
#include <vector>
#include <memory_resource>

using namespace std;

class Test{
    public:
        Test():a{false}{}
        Test TurnOnA(std::pmr::vector<int> aa){
            if(aa.empty()) return *this;
            a=true;
            return *this;
        }
    private:
        bool a;
};

std::pmr::vector<int> test{std::pmr::new_delete_resource()};
const auto my_t = Test{}.TurnOnA(test.insert(test.end(),{1,2,3}));

int main()
{
    cout<<"Hello World";

    return 0;
}

您好,我需要通過將std::pmr::vector傳遞給類中的函數來創建全局變量my_t 在上面的例子中my_t給出了錯誤。 我該如何解決這個問題,為什么會出現錯誤?

錯誤信息:

prog.cc:20:45: error: cannot convert 'std::vector<int, std::pmr::polymorphic_allocator<int> >::iterator' to 'std::pmr::vector<int>' {aka 'std::vector<int, std::pmr::polymorphic_allocator<int> >'}
   20 | const auto my_t = Test{}.TurnOnA(test.insert(test.end(),{1,2,3}));
      |                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
      |                                             |
      |                                             std::vector<int, std::pmr::polymorphic_allocator<int> >::iterator
prog.cc:10:44: note:   initializing argument 1 of 'Test Test::TurnOnA(std::pmr::vector<int>)'
   10 |         Test TurnOnA(std::pmr::vector<int> aa){
      |                      ~~~~~~~~~~~~~~~~~~~~~~^~

如何在 C++ 中聲明和定義 const 全局向量?

就像您在示例中所做的那樣,但添加const 請注意,您將無法在初始化后將元素添加到 const 向量中。

我該如何解決這個問題,為什么會出現錯誤?

這是一個錯誤,因為該函數需要一個向量,而您將迭代器傳遞給該函數。

解決方案:不是將迭代器傳遞給需要向量的函數,而是傳遞向量本身。

const auto my_t = Test{}.TurnOnA(test.insert(test.end(),{1,2,3}));

test.insert返回一個迭代器,但TurnOnA需要完整的向量。 在你需要寫的函數中

test.insert(test.end(),{1,2,3});
const auto my_t = Test{}.TurnOnA(test);

在這個全局變量中,你需要寫

const auto my_t = Test{}.TurnOnA((test.insert(test.end(),{1,2,3}),test));

但這是糟糕的設計,您可能會遇到全局對象初始化順序的失敗。 您最好嘗試將其封裝在專用函數中!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM