Прямое объявление функции портится, говоря, что аргументы являются необъявленными идентификаторами

Это мой код:

  • mainheader.h

    void displaygrid(int (* _grid)[10][10] , string msg );
    
  • something.cpp

    #include <string>
    #include "mainheader.h"
    void displaygrid(int (* _grid)[10][10], string msg = "" )
    {
    //body goes here
    }
    

Компилятор говорит в строке предварительного объявления в заголовке:

_grid и string являются необъявленными идентификаторами

однако, так как это всего лишь прототип, он не должен беспокоиться о существовании _grid, право ?

Кроме того, заголовок включен после строки, но он также не знает о строке. Похоже, что он пытается вызвать функцию вместо объявления вперед. В чем дело?

0

Решение

За string ты должен использовать std::string,

4

Другие решения

Он должен знать о __grid в заголовке, а также об объявлении строки — вперед или нет. Вам нужно как минимум разместить struct __grid; где-то выше этого или лайков, так что у него есть какая-то подсказка, что это такое. То же самое для строки …

1

Вам нужно #include <string> в вашем mainheader.h и обратитесь к string как std::string, Вы также должны включить все необходимое, чтобы получить _grid:

//mainheader.h
#include <string>
void displaygrid(int (* _grid)[10][10] , std::string msg );

Связанный пост Вот.

1

Вам также нужен аргумент по умолчанию в заголовочном файле, а не в реализации, потому что вы хотите, чтобы код вызывал его знать тот msg может быть по умолчанию.

0
По вопросам рекламы [email protected]