Tôi có một DLL đơn giản thực hiện một số phép tính với đa giác Tăng Hình học. Vì phần lớn DLL sẽ được gọi từ mã C#, và từ Delphi và những người biết từ nơi khác, tôi nên chuyển đổi kết quả thành các mảng mà mọi thứ có thể xử lý.Lấy tọa độ của các điểm từ đa giác Tăng Hình học
CẬP NHẬT: Tôi đã đơn giản hóa và sửa chữa phần nào mã của mình. Mã mới trông hoàn toàn khác, sử dụng một cách tiếp cận hoàn toàn khác (for_each_point
), và bằng cách nào đó vẫn không biên dịch.
mã mới của tôi:
#include <vector>
#include <boost/range.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
using namespace boost::geometry;
typedef boost::geometry::model::point
<
double, 2, boost::geometry::cs::spherical_equatorial<boost::geometry::degree>
> spherical_point;
class PointAggregator {
private :
double *x, *y;
int count;
public :
PointAggregator(int size) {
x = (double*) malloc(sizeof(double) * size);
y = (double*) malloc(sizeof(double) * size);
count = 0;
}
~PointAggregator() {
free(x);
free(y);
}
inline void operator()(spherical_point& p) {
x[count] = get<0>(p);
y[count] = get<1>(p);
count++;
}
void GetResult(double *resultX, double *resultY) {
resultX = x;
resultY = y;
}
};
void VectorToArray(std::vector<model::polygon<spherical_point>> resultVector, double x[], double y[], int *count) {
int i = 0;
for (std::vector<model::polygon<spherical_point>>::iterator it = resultVector.begin(); it != resultVector.end(); ++it) {
if (boost::size(*it) >= 2) {
*count = boost::size(*it);
PointAggregator* pa = new PointAggregator(*count);
boost::geometry::for_each_point(*it, *pa);
pa->GetResult(x, y);
delete(pa);
break;
}
}
}
Các lỗi biên dịch hiện tại là:
- lỗi C2039: 'loại': không phải là thành viên của 'mpl :: eval_if_c đẩy mạnh ::' iterator. hpp 63
- lỗi C3203: 'loại': mẫu lớp không chuyên biệt không thể được sử dụng làm đối số mẫu cho tham số mẫu 'Iterator', dự kiến là một loại thực sự differ_type.hpp 25
- lỗi C2955: 'Boost :: gõ': sử dụng các lớp mẫu đòi hỏi mẫu danh sách đối số difference_type.hpp 25
- lỗi C2955: 'đẩy mạnh :: iterator_difference': sử dụng các lớp mẫu đòi hỏi mẫu danh sách đối số difference_type.hpp 26
Mà những người không giống như họ có bất cứ điều gì để làm với phần này của mã (tên tập tin của tôi là geometry.cpp), nhưng tất cả mọi thứ khác sử dụng Tăng Geometry là nhận xét ra và tôi vẫn nhận được các lỗi này, vì vậy ...
Here is my bad code that I had previously (edited by sehe)
(Tôi mới dùng C++ và Boost nên có thể tôi đã bỏ lỡ Tôi giả sử rằng tôi không thể lặp lại thông qua một đa giác dễ dàng và tôi đã bỏ lỡ phần không tầm thường, hoặc một đa giác không thể được sử dụng như là một vòng, hoặc lặp đi lặp lại là không phải cách tôi nghĩ, hoặc tôi không biết cái gì khác có thể sai. Tôi đã làm gì sai?
Bạn có gặp phải lỗi biên dịch hoặc bạn đang tìm kiếm lỗi logic không? Chính xác thì điều gì không hiệu quả với bạn? – sbrett
Tôi đã cập nhật mã của mình. Vì tôi không thể biên dịch được, tôi không biết liệu tôi có làm mọi thứ đúng ngữ nghĩa hay không, vì vậy tôi đang tìm kiếm bất kỳ loại lỗi nào mà tôi đã tạo ra. – ytg
Phiên bản tăng cường mà tôi có trên hệ thống của mình là 1,35, vì vậy tôi đã cập nhật bất cứ thứ gì họ có trên SVN (sớm là 1,48). Tôi có thể vượt qua các vấn đề liên quan đến việc không tăng cường :: hình học và xem chính xác loại lỗi bạn đang nhận được, và nó lộn xộn, nhưng không có nhiều. Từ những gì tôi có thể nói chỉ bằng cách nhìn vào nó, phương thức boost :: size được định nghĩa như một phần của cái mà tôi tin là boost_range, dường như không biết cách xử lý mô hình của bạn :: polygon. Sau khi xem xét tham chiếu phạm vi tăng, tôi nhận thấy rằng nó đã đề cập đến các hàm bắt buộc như range_begin. –
sbrett