Я пытаюсь создать шахматный модуль, используя структуру ChessPiece и структуру ChessGame. Использование XCode 6.1.1. Вот мой заголовочный файл и функция, о которых идет речь в моем Chess.cpp. Я получаю сообщение об ошибке: «Использование необъявленного идентификатора« initChessPiece »вы имели в виду« ChessPiece :: initChessPiece »? Если я сделаю это изменение, он говорит об ошибке« вызов функции не-стека без аргумента объекта ». И, наконец, если я линия,Тело функции C++, вызывающее другую функцию structs, тот же модуль
game.pieces[i].initChessPiece(game.pieces[i], color, piece, x, y);
Linker бросает ошибка:
неопределенных символов для архитектуры x86_64: «Фишка :: initChessPiece (фишка, станд :: __ 1 :: basic_string, станд :: __1 :: allocator> const &, std :: __ 1 :: basic_string, std :: __ 1 :: allocator> const &, unsigned int, unsigned int) ", на который ссылаются: readChessGame (ChessGame &, std :: __ 1 :: basic_string, std :: __ 1 :: allocator> const &) в Chess.o ld: символы (символы) не найдены для архитектуры x86_64 лязг: ошибка: команда линкер потерпела неудачу с кодом выхода 1 (используйте опцию -v, чтобы вызов)
#ifndef CHESS_H
#define CHESS_H
#include <stdio.h>
#include <string>
using namespace std;
const int ROWS = 8;
const int COLUMNS = 8;
struct ChessPiece {
string name;
string colour;
unsigned int row;
unsigned int column;
void initChessPiece(ChessPiece, const string& colour, const string& name, unsigned int row, unsigned int column);
string getStringColourChessPiece(const ChessPiece&) const;
string getStringNameChessPiece(const ChessPiece&) const;
friend class ChessGame;
};
struct ChessGame {
unsigned int chessBoard[ROWS][COLUMNS];
ChessPiece pieces[32];
void readChessGame(ChessGame&, const string& filename);
void printChessGame(const ChessGame&);
int scoreChessGame(const ChessGame&) const;
bool isFinished(const ChessGame&) const;
};
#endif
Chess.cpp
#include "Chess.h"
void readChessGame(ChessGame& game, const string& filename) {
ifstream inData;
inData.open(filename.c_str());
string color;
string piece;
unsigned int x;
unsigned int y;
for (int i=0;i<32;i++) {
inData >> color >> piece >> x >> y;
initChessPiece(game.pieces[i], color, piece, x, y);
}
}
void initChessPiece(ChessPiece& piece, const string& colour, const string& name, unsigned int row, unsigned int column) {
piece.row = row;
piece.column = column;
piece.name = name;
piece.colour = colour;
}
Это мой последний вопрос практика CS и все функциональные заголовкам были установлены инструкциями, поэтому мне нужно работать с тем, как они устанавливаются.
У вас больше шансов получить помощь, если вы включите в свой вопрос полные точные сообщения об ошибках (оба из них). –
Почему вы передаете кусок себе (по значению) в 'initChessPiece'? –
Где вы определяете 'initChessPiece (...)'? Есть ли какой-то другой исходный файл, о котором вы нам не говорили? И какой инструмент вы используете, чтобы попытаться построить это? – Beta