c ++ передает динамически размещенный 2d вектор в функцию - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь передать динамически размещенный 2d вектор в функцию по ссылке в c ++.

Первоначально я пытался сделать это с 2d массивом, но мне сказали попробовать с 2d вектором вместо. В приведенном ниже коде происходит сбой в строке solve_point (boardExVector) из-за ошибки преобразования.

#include <stdio.h>       /* printf */
#include <bits/stdc++.h> /* vector of strings */
using namespace std;

void solve_point(vector<char> *board){ 
    printf("solve_point\n");
    board[2][2] = 'c';
}

int main(){
    //dynamically allocate width and height
    int width = 7;
    int height = 9;
    //create 2d vector
    vector<vector<char>> boardExVector(width, vector<char>(height));
    boardExVector[1][2] = 'k';
    //pass to function by reference
    solve_point(boardExVector);
    //err: no suitable conversion function from "std::vector<std::vector<char, std::allocator<char>>, std::allocator<std::vector<char, std::allocator<char>>>>" to "std::vector<char, std::allocator<char>> *" exists
    printf("board[2][2] = %c\n", boardExVector[2][2]);
}

Я только возвращаюсь в c ++, поэтому я работаю над указателями и ссылками, я искал решения для этого в Интернете и пытался некоторые уже включают изменение заголовка функции solve_point для включения * или &, но я пока не получил его на работу. Любая помощь приветствуется. Спасибо

1 Ответ

1 голос
/ 18 марта 2020

Аргумент функции ожидает указатель на вектор типа char, в то время как вызывающая функция передает вектор типа vector<char>. Вы ищете следующие изменения в вашей функции?

//bits/stdc++.h is not a standard library and must not be included.
#include <iostream>
#include <vector> /* vector of strings */
using namespace std;

void solve_point(vector<vector <char>> &board){
    printf("solve_point\n");
    board[2][2] = 'c';
}

int main(){
    //dynamically allocate width and height
    int width = 7;
    int height = 9;
    //create 2d vector
    vector<vector<char>> boardExVector(width, vector<char>(height));
    boardExVector[1][2] = 'k';
    //pass to function by reference
    solve_point(boardExVector);
    //err: no suitable conversion function from "std::vector<std::vector<char, std::allocator<char>>, std::allocator<std::vector<char, std::allocator<char>>>>" to "std::vector<char, std::allocator<char>> *" exists
    printf("board[2][2] = %c\n", boardExVector[2][2]);
}
...