मेरी प्रोजेक्ट में मैंने इस्तेमाल किए गए पॉइंट प्रकार को Eigen::Vector2f
से Eigen::Vector2d
में बदल दिया और संरेखण समस्या में भाग गया।std :: vector के आवंटक को बदलते समय प्रारंभकर्ता सूची क्यों उपलब्ध नहीं हैं?
#include <vector>
#include <Eigen/Eigen>
int main()
{
std::vector<Eigen::Vector2d> points = { {0,0}, {0,1} };
}
मैं निम्नलिखित रन टाइम त्रुटि हो रही है::
यहाँ कोड का एक सरलीकृत संस्करण है
eigen3/Eigen/src/Core/DenseStorage.h:78: Eigen::internal::plain_array<double, 2, 0, 16>::plain_array() [T = double, Size = 2, MatrixOrArrayOptions = 0, Alignment = 16]: Assertion `(reinterpret_cast<size_t>(array) & 0xf) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
के रूप में ज़ोर-संदेश का सुझाव दिया, मैं आवश्यक alignment of Fixed-size vectorizable Eigen objects के बारे में पढ़ा । और STL Containers के उपधारा भी। और ऐसा लगता है जैसे मैं दो विकल्प हैं:
- उपयोग
Eigen::aligned_allocator
- या का उपयोग
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION
मैक्रो।
दोनों प्रयास संकलित नहीं करते हैं (जीसीसी 4.8.3 और क्लैंग 3.5 के साथ परीक्षण) क्योंकि संकलक प्रारंभकर्ता सूची को सही ढंग से परिवर्तित करने में सक्षम नहीं है।
यहाँ बदल कोड:
#include <vector>
#include <Eigen/Eigen>
#include <Eigen/StdVector>
// EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Vector2d)
int main()
{
std::vector<Eigen::Vector2d, Eigen::aligned_allocator<Eigen::Vector2d>> points = { {0,0}, {0,1} };
// std::vector<Eigen::Vector2d> points = { {0,0}, {0,1} };
}
जीसीसी त्रुटि उत्पादन:
error: could not convert ‘{{0, 0}, {0, 1}}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Eigen::Matrix<double, 2, 1>, Eigen::aligned_allocator<Eigen::Matrix<double, 2, 1> > >’
तो मैं सोच रहा हूँ: उपलब्ध नहीं
क्यों हैं प्रारंभकर्ता सूचियों जब संभाजक बदलते
std::vector
का?- क्या यह संरेखण की वजह से है?
- क्या मैं किसी भी तरह प्रारंभकर्ता सूची को संरेखित कर सकता हूं?
विशेषज्ञता संस्करण क्यों विफल रहा है?
- क्या इन्हें प्रारंभकर्ता सूची सुविधा की कमी है?