c++声明向量数组以获取类,但不能访问成员变量
c++ declare vector array to get a class, but cannot access member variable
当我声明vector以获取类,但不能访问成员变量时。
代码有更多详细信息,
class test{
public :
int num; //member variable
test(int k){ //constructor
num=k;
}
};
int main(){
vector<test *> a[10]; //declare vector
for(int i=0;i<10;i++)
a.push_back(new test(p)); //use constructor initial
for(int i=0;i<10;i++)
cout<<a[i].num<<endl; //THIS STEP ERROR, 'NO MENBER num'
}
我找不到解决办法。QAQ~
class test{
public :
int num; //member variable
test(int k){ //constructor
num=k;
}
如果所有成员都是公开的,为什么不使用struct
呢
此外,该ctor调用一个ctorinit列表,如下所示:
struct test{
int num;
test(int num) : num(num) {}
};
int main(){
vector<test *> a[10]; //declare vector
谎言在广告中,你实际上是在定义,以及一个由十个向量组成的数组。
vector<test*> a; // This is a vector of pointers to test
for(int i=0;i<10;i++)
a.push_back(new test(p)); //use constructor initial
for(int i=0;i<10;i++)
cout<<a[i].num<<endl; //THIS STEP ERROR, 'NO MENBER num'
}
a[i]
属于test*
类型,指针不具有成员。您希望使用箭头运算符->
。
cout<<a[i]->num<<endl;
最后,你忘了删除所有分配的内存。
解决方案:
不要分配动态内存,而是直接存储
test
-对象。vector<test> a; // This is a vector of test for(int i=0;i<10;i++) a.push_back(test(p)); //use constructor initial for(int i=0;i<10;i++) cout<<a[i].num<<endl;
使用智能指针(
<memory>
):vector<std::unique_ptr<test>> a; // This is a vector of std::unique_ptr<test> for(int i=0;i<10;i++) a.push_back(new test(p)); //use constructor initial for(int i=0;i<10;i++) cout<<a[i]->num<<endl;
- 添加所有手动内存管理,但记住所有分配都可以抛出
太长,容易出错,不会写
您已经声明了一个向量数组:
std::矢量<>a[10];一个由10个矢量组成的数组。
数组中的每个槽都是指向测试类的指针的向量:
std::vector<Test *> a[10];
因此,要访问Test
项,您需要找出要访问的数组元素以及该项在数组中的位置:
Test p_object = 0;
p_object = a[3].[2]; // The fourth vector, the third slot in the fourth vector.
std::cout << "Test item from 3rd slot in 4th vector: "
<< p_object->num
<< "n";
我不认为这是你需要或想要的。代码显示的图片类似于二维矩阵。通常,2d矩阵被声明为向量的向量或2d数组;而不是两者的结合。
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 我不能访问基类的函数
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- C++变量可以在构造函数中访问,但不能在函数中访问
- c++声明向量数组以获取类,但不能访问成员变量
- 一个函数,它是允许'read access'其'private members'但不能"写入访问权限"的'friend of a Class'?