我试图完成一些工作并突然意识到我不知道如何正确地向方法发送指针参数。在网络上寻找相同的问题,但没有找到任何更好的解决方案。 我的代码是:
TextBook *lib[50];
lib[0]=new TextBook(arg1, arg2, arg3);
lib[1]=new TextBook(arg1, arg2, arg3);
我的功能是:
void libPrint(Textbook *lib){
cout<<lib[0]->getArg1();
cout<<lib[0]->getArg2();
// etc..
}
但是libPrint方法会生成“触发断点”错误,但是我没有创建任何断点,所以可能是因为使用某些不合适的指针或仅仅是语法错误的方式引起的。
所以我的答案是:我怎样才能重写libPrint方法以使其正常工作?
答案 0 :(得分:3)
你必须使用指针吗?我建议像:
// Declare your vector
std::vector<TextBook> lib;
// Add TextBooks
lib.emplace_back(arg1, arg2, arg3);
lib.emplace_back(arg1, arg2, arg3);
并为您的打印功能
void libPrint(std::vector<TextBook> const& lib)
{
// Loop over each book and print arguments
for (auto const& book : lib)
{
cout << book.getArg1() << endl;
cout << book.getArg2() << endl;
cout << book.getArg3() << endl;
}
}
答案 1 :(得分:2)
该功能应该看起来像
void libPrint(Textbook **lib){
cout<<lib[0]->getArg1();
cout<<lib[0]->getArg2();
// etc..
}
那就是你有一个像
这样的数组T lib[50];
其中T是某种类型,然后当它按值传递给函数时,数组名称将转换为指向其第一个元素的指针
void libPrint( T *lib );
这里使用函数参数lib
的类型为T *
现在只需用T
替换数组元素的类型
TextBook * lib[50];
T
等于TextBook *
。因此,指向数组第一个元素的指针将具有类型Textbook **
。
这三个函数声明
void libPrint(Textbook * lib[50] );
void libPrint(Textbook * lib[] );
void libPrint(Textbook **lib );
是等效的,并声明相同的一个函数。