gpt4 book ai didi

C++ 标准 :vector< T* const>

转载 作者:太空狗 更新时间:2023-10-29 23:52:18 25 4
gpt4 key购买 nike

我必须继续一个程序。我之前的程序员经常使用这个结构:

std:vector< T* const>

他在 Visual Studio C++ 2010 中编写了 ist,并能够对其进行编译。我正在使用 g++,它会抛出一些编译错误。

    g++ -g -Wall -c -std=c++11 -pedantic -I/usr/include/SuperLU/ src/Cell.cpp -o obj/Cell.o
In file included from src/Cell.cpp:13:0:
src/Cell.h:81:2: warning: extra ';' [-pedantic]
In file included from /usr/include/x86_64-linux-gnu/c++/4.7/./bits/c++allocator.h:34:0,
from /usr/include/c++/4.7/bits/allocator.h:48,
from /usr/include/c++/4.7/string:43,
from /usr/include/c++/4.7/bits/locale_classes.h:42,
from /usr/include/c++/4.7/bits/ios_base.h:43,
from /usr/include/c++/4.7/ios:43,
from /usr/include/c++/4.7/ostream:40,
from /usr/include/c++/4.7/iostream:40,
from src/Cell.cpp:2:
/usr/include/c++/4.7/ext/new_allocator.h: In instantiation of 'struct __gnu_cxx::new_allocator<BattPackage::Leg* const>':
/usr/include/c++/4.7/bits/allocator.h:89:11: required from 'class std::allocator<BattPackage::Leg* const>'
/usr/include/c++/4.7/bits/alloc_traits.h:92:43: required from 'struct std::allocator_traits<std::allocator<BattPackage::Leg* const> >'
/usr/include/c++/4.7/ext/alloc_traits.h:110:10: required from 'struct __gnu_cxx::__alloc_traits<std::allocator<BattPackage::Leg* const> >'
/usr/include/c++/4.7/bits/stl_vector.h:76:28: required from 'struct std::_Vector_base<BattPackage::Leg* const, std::allocator<BattPackage::Leg* const> >'
/usr/include/c++/4.7/bits/stl_vector.h:208:11: required from 'class std::vector<BattPackage::Leg* const>'
src/Cell.h:283:39: required from here
/usr/include/c++/4.7/ext/new_allocator.h:83:7: error: 'const _Tp* __gnu_cxx::new_allocator<_Tp>::address(__gnu_cxx::new_allocator<_Tp>::const_reference) const [with _Tp = BattPackage::Leg* const; __gnu_cxx::new_allocator<_Tp>::const_pointer = BattPackage::Leg* const*; __gnu_cxx::new_allocator<_Tp>::const_reference = BattPackage::Leg* const&]' cannot be overloaded
/usr/include/c++/4.7/ext/new_allocator.h:79:7: error: with '_Tp* __gnu_cxx::new_allocator<_Tp>::address(__gnu_cxx::new_allocator<_Tp>::reference) const [with _Tp = BattPackage::Leg* const; __gnu_cxx::new_allocator<_Tp>::pointer = BattPackage::Leg* const*; __gnu_cxx::new_allocator<_Tp>::reference = BattPackage::Leg* const&]

他想要的这个结构是一个指针 vector ,他可以在其中添加和删除指针并操纵指针的目标,但不能更改指针指向的对象。

据我所知,它不应该编译,因为 T* const 不可赋值。

有谁知道为什么它在 Visual Studio 中编译?我可以在声明中替换它而无需更改完整代码吗?

最佳答案

std::vector使用分配器为其成员分配、重新分配和释放内存。分配器要求仅为分配器定义 X对于类型 T , 其中T是“任何非常量、非引用对象类型”(C++11 表 27)。所以使用 std::vector<T* const>给你未定义的行为,因为它使用的分配器没有为 const 元素类型定义。

你最好尽快解决这个问题。将声明更改为 std::vector<T*> 不太可能出现很多问题.

关于C++ 标准 :vector< T* const>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com