在我正在编写的程序中,我有一个指针向量来尝试并节省内存使用量,虽然这会使我的程序更有效率,但我无法将指针向量传递给函数direct()。非常感谢任何有关将此函数传递给函数的正确语法的帮助
显示的当前错误是:“错误无法将'std :: vector *> '转换为'const string '...对于参数'1'... 标记此错误的行是调用函数direct的行
#include <iostream>
#include <vector>
using namespace std;
// a function used to display an array used for testing purposes
void display_array(const string *arr, size_t size )
{
int i;
for (i = 0; i < size; i++){
cout<<(int(arr[i][0]))-64;
cout<<(int(arr[i][1]))-64;
cout<<",";
}
}
// Takes in the connections to the start and the connections to the end and returns the connection if
//there is a direct connection else returns 0
string direct(const string *destination, char *start, size_t destination_size) {
for (int i = 0; i<destination_size;i++)
if ((&destination[i][0] == start) or (&destination[i][1] == start))
return destination[i];
}
int main()
{
string current;
std::vector<string> paths;
std::vector<string*> start_connections;
std::vector<string*> destination_connections;
char start;
char destination;
cout<<"Input paths in the form 'AB'(0 to exit)\n";
cin>>current;
while (current != "0"){
paths.push_back(current);
cin>>current;
}
cout<<"Input starting location\n";
cin>> start;
cout<<"Input final destination\n";
cin>>destination;
for(int i = 0; i < paths.size(); i++) {
if ((paths[i][0] == destination) or (paths[i][1] == destination)) //all connections to the destination
destination_connections.push_back(&paths[i]); // paths stored as a pointer to paths array
if ((paths[i][0] == start) or (paths [i][1] == start)) //all connections to the start
start_connections.push_back(&paths[i]); // paths stored as a pointer to paths array
}
cout<<direct(&destination_connections,&start,destination_connections.size());
if( !paths.empty() )
display_array( &paths[0], paths.size() );
}
答案 0 :(得分:2)
编译器告诉你确切的错误 - 向量不是指针。
理想情况下,你根本不应该使用指针 - 将你的向量声明为
std::vector<std::string>
并使用它传递对函数的引用
... direct(const std::vector<std::string> & dest, ...)
然后,您只需按照值传递向量,但引用运算符会告诉编译器只传递其地址而不是整个对象。
您还可以获得不必单独传递其大小的好处,因为迭代它的函数可以直接访问它(尽管通过索引访问它并不是OO方式)。
在C ++中,如果你使用裸指针,你可能做错了;)
答案 1 :(得分:0)
您正试图传递vector<string*>*
,其中string*
是预期的。
改变这个:
direct(&destination_connections, &start, destination_connections.size());
对此:
direct(&destination_connections[0], &start, destination_connections.size());
或者,如果您使用的是C ++ 11:
direct(destination_connections.data(), &start, destination_connections.size());
话虽这么说,or
不是有效的C ++关键字,但您需要使用||
。而且我认为你在display()
内部错误处理指针。你需要对你真正想要完成的事情进行代码审查。