我正在嘗試填充指向類 B 的型別指標的向量,稍后我將使用它。當我嘗試讀取向量的元素時,我得到的值與我給出的值不同。有人可以在這里幫助我,我犯了什么錯誤以及如何糾正它?謝謝
#include <iostream>
#include <vector>
class B {
public:
int b;
B (int n) {
b = n;
}
};
std::vector<B*> v;
class A {
public:
int a;
void func(int n);
};
void A::func(int n) {
B obj_b(n);
B* ptr = &obj_b;
v.push_back(ptr);
}
int main() {
A obj_a;
obj_a.a = 5;
obj_a.func(4);
std::cout<<obj_a.a<<std::endl;
for (auto it:v) {
std::cout<<it->b<<std::endl;
}
}
我得到的輸出是:5, 32765 而預期的輸出是:5, 4
uj5u.com熱心網友回復:
根據上面的評論,使用值而不是指標:
#include <iostream>
#include <vector>
class B {
public:
int b;
B (int n) {
b = n;
}
};
std::vector<B> v;
class A {
public:
int a;
void func(int n);
};
void A::func(int n) {
v.emplace_back(n);
}
int main() {
A obj_a;
obj_a.a = 5;
obj_a.func(4);
std::cout<<obj_a.a<<std::endl;
for (auto& e:v) {
std::cout<<e.b<<std::endl;
}
}
uj5u.com熱心網友回復:
您可以使用堆分配并利用std::unique_ptr<T>. 這是修復:
#include <iostream>
#include <vector>
#include <memory>
class B
{
public:
B ( const int n )
{
b = n;
}
int b;
};
std::vector< std::unique_ptr<B> > v; // use a vector of B pointers
// ( std::unique_ptr<B> )
class A
{
public:
void func( const int n );
int a;
};
void A::func( const int n )
{
v.push_back( std::make_unique<B>( n ) ); // returns a pointer object of type
} // std::unique_ptr<B>
int main ()
{
A obj_a;
obj_a.a = 5;
obj_a.func( 4 );
std::cout << obj_a.a << std::endl;
for ( const auto& ptrB : v )
{
std::cout << ptrB->b << std::endl; // use -> operator to have access to
} // ptrB's members
return 0;
}
希望這會有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/363576.html
上一篇:我無法使用vscode將一個檔案的類匯入到Java子檔案夾中的另一個檔案
下一篇:使用類時如何修復屬性錯誤
