Tôi đã gợi ý sử dụng con trỏ để thêm một vectơ mà tôi muốn chuyển từ một số hàm hiện có sang một hàm khác. Tôi thực sự bị mắc kẹt về cách để có được thông tin trở lại ra của con trỏ đó mặc dù. Tôi đã thử một số điều tôi đã đọc ở đây và vì vậy hãy để tôi chứng minh những gì tôi đang nói về.truyền một vector giữa các hàm thông qua con trỏ
chương trình tiểu học:
std::vector<float> * dvertex=NULL;
track.calculate(irrelevant stuff, dvertex)
chương trình trung học (theo dõi, tính toán)
track::caclulate(irrelevant stuff, vector<float> * dvertex)
{
...
vector<float> pos;
... pos filled after some calculations
if(! (dvertex==NULL))
{
dvertex = &pos1;
}
trở lại tiểu học, trừ khi tôi sai lầm gì đó ở trên, đây là một số những điều tôi đã cố gắng
(*dvertex).at(0)
float z = (*dvertex).at(0)
(*dvertex)[0]
và một loạt nội dung đơn giản không biên dịch. Tôi khá khó khăn vì tôi không chắc chắn làm thế nào để có được các giá trị cụ thể trong số đó vector trong chương trình chính. Tôi thậm chí nghĩ rằng nó có thể là nếu (! (Dvertex == NULL)) bit, vì vậy tôi đã thay đổi nó nếu (dvertex == NULL) nhưng vẫn không có niềm vui. Mọi sự trợ giúp sẽ rất được trân trọng.
* Chỉnh sửa/cập nhật * Cảm ơn rất nhiều vì đã giúp đỡ, nhưng tôi sợ rằng tôi vẫn đang làm sai.
Vì vậy, sau khi gợi ý rằng tôi chỉ cần vượt qua một tài liệu tham khảo: Tôi đã làm điều này:
chính
std::vector<float> dvertex;
track.calculate(foo, &dvertex);
thứ vẫn không thay đổi (với kiểm tra Null!)
chính
std::cout<<dvertex[0]<<std:endl;
(trong số các nỗ lực khác để thực sự sử dụng dữ liệu)
Cảm ơn rất nhiều vì bất kỳ suy nghĩ nào về những gì tôi vẫn đang làm không đúng cách. Tất cả mọi thứ biên dịch, chương trình chỉ đóng băng khi nó được đến một điểm mà dữ liệu từ dvertex được sử dụng.
Chỉnh sửa: Final sửa chữa
trong chương trình trung học tôi cần
*dvertex = pos1;
thay vì
dvertex = &pos1;
Không được đưa thêm đề xuất vào bạn, nhưng bạn nên chuyển nó ở dạng tham chiếu . Sau đó, không cần phải dereference bất cứ điều gì, và bạn sẽ có được tất cả những lợi ích tương tự. – jonsca
@jonsca là đúng, bạn nên làm một cái gì đó như track :: caclulate (công cụ không liên quan, vector & dvertex), sau đó chỉ đơn giản là xử lý dvertex như một vectơ bình thường và công việc thực hiện với nó vẫn sẽ có sẵn bên ngoài phương pháp. –
Đôi khi tôi thích chuyển qua con trỏ nếu vùng chứa sẽ được sửa đổi. Tại trang web cuộc gọi thường yêu cầu sử dụng toán tử địa chỉ: 'func (& my_vertor);' Đây là lời nhắc nhở nhỏ rằng hàm thực sự sửa đổi vùng chứa. Nếu bạn luôn chuyển qua tham chiếu, bạn không thể phân biệt giữa các cuộc gọi sửa đổi và không sửa đổi mà không nhìn vào khai báo hàm. Tuy nhiên, đây hoàn toàn là vấn đề về phong cách, không có lợi ích về hiệu suất. – dappawit