#c
#c
Вопрос:
Я довольно новичок в C , просмотрел несколько других тем о том, как включить второй cpp-файл, не уверен, что именно я делаю неправильно… В основном я получаю ошибки из массива grid и перечисления, и, по-видимому, я также не могу использовать void для файла minimax.h? остальная часть main.cpp файл работает нормально, пока я компилирую его один
minimax.cpp
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
void minimax(Gridamp; grid, Color color_player)
{
int AI_Play;
/* initialize random seed: */
srand (time(NULL));
/* generate secret number between 0 and grid size: */
AI_Play = rand() % grid.size() 0;
play(grid, AI_Play, color_player)
}
minimax.h
#ifndef MINIMAX_H_INCLUDED
#define MINIMAX_H_INCLUDED
minimax(Gridamp; grid, Color color_player)
#endif // MINIMAX_H_INCLUDED
main.cpp
#include <SDL.h>
#include <stdio.h>
#include <array>
#include <iostream>
#include <minimax.h>
using namespace std;
//Connect Four Array
#define COLUMN 6
#define ROW 7
//Screen dimension constants
const int SCREEN_WIDTH = 364;
const int SCREEN_HEIGHT = 312;
enum Color {red, black, nothing};
typedef array<array<Color, ROW>, COLUMN> Grid;
Комментарии:
1. какие именно ошибки вы получаете?
2. Я считаю, что это должно быть
#include "minimax.h"
не#include <minimax.h>
3. для перечисления и массива в main.cpp Я получаю сообщение not declared в этой области в более поздних частях я также получаю ту же ошибку в minimax.cpp только что попробовал «minimax.h» с теми же ошибками, также получая ошибки о том, что функция в minimax недействительна, а также инициализация для main.cpp
4.
minmax.cpp
не знает, что такоеColor
orGrid
. Вероятно, их следует включить вminmax.h
5. как мне объявить их в minimax.h?
Ответ №1:
Вам нужно переместить объявление Grid
и Color
в minimax.h — иначе они не будут видны внутри minimax.cpp . Вам также необходимо включить minimax.h из minimax.cpp
Кроме того, вы должны объявить возвращаемый тип ‘void’ в вашей функции в файле .h..
Комментарии:
1. Я только что сделал это, кажется, исправил некоторые ошибки, но я не уверен, как объявить 2d-массив в minimax.h
2. minimax.h #ifndef MINIMAX_H_INCLUDED #определить MINIMAX_H_INCLUDED цвет перечисления {красный, черный, ничего}; typedef массив<массив<Цвет, 7>, 6> сетка; аннулировать минимакс (сетка и grid, Color color_player) #endif // MINIMAX_H_INCLUDED
3. Вам также нужно
#include <array>
открыть файл .h и переместить еще несколько включений по мере необходимости. Но — я / мы не можем рассказать вам о каждом сбое, поэтому моим советом было бы закрыть вопрос на этом этапе, поскольку ваша непосредственная проблема была решена.
Ответ №2:
Попробуйте изменить
#include <minimax.h>
Для
#include "minimax.h"
<header name>
предназначен для встроенного заголовка.
Вам нужно включить внутри Color
объявление Grid
and minimax.h
или поместить его куда-нибудь в файл, а затем включить его внутрь minimax.h
. Ваш minimax.cpp
также должен включать minimax.h
Ответ №3:
minimax()
не знает, что такое Grid
и Color
, потому что вы не определили их перед определением minimax()
. Вместо этого ваш код должен выглядеть примерно так:
minimax.h
#ifndef MINIMAX_H_INCLUDED
#define MINIMAX_H_INCLUDED
#include <array>
//Connect Four Array
#define COLUMN 6
#define ROW 7
enum Color {red, black, nothing};
typedef std::array<std::array<Color, ROW>, COLUMN> Grid;
void minimax(Gridamp; grid, Color color_player);
#endif // MINIMAX_H_INCLUDED
minimax.cpp
#include "minimax.h"
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
void minimax(Gridamp; grid, Color color_player)
{
int AI_Play;
/* initialize random seed: */
srand (time(NULL));
/* generate secret number between 0 and grid size: */
AI_Play = rand() % grid.size() 0;
play(grid, AI_Play, color_player);
}
main.cpp
#include <SDL.h>
#include <stdio.h>
#include <iostream>
#include "minimax.h"
//Screen dimension constants
extern const int SCREEN_WIDTH;
extern const int SCREEN_HEIGHT;
// use minimax() as needed, eg...
int main()
{
Grid grid;
...
minimax(grid, black);
...
return 0;
}