[英]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.