结构 c++ 之外的函数定义

Functions definitions outside the structure c++

本文关键字:函数 定义 c++ 结构      更新时间:2023-10-16

我正在用VS13中的结构编写一个程序。我想将函数声明与函数定义分开。我在书中无数次看到"范围界定"的下一个原则:

<structure name>::<method name>

但是当我尝试在我的程序中实现它时,我总是得到一个错误,即无法在他们的类之外重新声明函数:

#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
#include <array>
#define com
using namespace std;
int main() {
    struct game {
        int row, col, size, count = 1;
        vector <vector<char>> b;
        enum board { blank, zero, cross };
        char num[3];
        board first, second;
        void numcreate();
        void create();
        void print();
        int check();
        void makemove();
        void process();
        void play();
    };
    void game::numcreate() {
        num[0] = '_';
        num[1] = 'o';
        num[2] = 'x';
    }
    void game::create() {
        b.resize(size);
        for (int i = 0; i < size; ++i)
        {
            b[i].resize(size);
            b[i].insert(b[i].begin(), size, num[blank]);
            copy(b[i].begin(), b[i].end(), ostream_iterator<char>(cout, " "));
            cout << endl;
        }
    }
    void game::print() {
        for (int i = 0; i < size; ++i)
        {
            copy(b[i].begin(), b[i].end(), ostream_iterator<char>(cout, " "));
            cout << endl;
        }
    }
    int game::check() {
        if (
            all_of(b[0].begin(), b[0].end(), [this](char t) {return (t == num[zero]); }) ||
            all_of(b[1].begin(), b[1].end(), [this](char t) {return (t == num[zero]); }) ||
            all_of(b[1].begin(), b[1].end(), [this](char t) {return (t == num[zero]); }) ||
            b[0][0] == num[zero] && b[1][1] == num[zero] && b[2][2] == num[zero] ||
            b[0][2] == num[zero] && b[1][1] == num[zero] && b[2][0] == num[zero] ||
            b[0][0] == num[zero] && b[1][0] == num[zero] && b[2][0] == num[zero] ||
            b[0][1] == num[zero] && b[1][1] == num[zero] && b[2][1] == num[zero] ||
            b[0][2] == num[zero] && b[1][2] == num[zero] && b[2][2] == num[zero]){
            return 1;
        }
        if (all_of(b[0].begin(), b[0].end(), [this](char t) {return (t == num[cross]); }) ||
            all_of(b[1].begin(), b[1].end(), [this](char t) {return (t == num[cross]); }) ||
            all_of(b[1].begin(), b[1].end(), [this](char t) {return (t == num[cross]); }) ||
            b[0][0] == num[cross] && b[1][1] == num[cross] && b[2][2] == num[cross] ||
            b[0][2] == num[cross] && b[1][1] == num[cross] && b[2][0] == num[cross] ||
            b[0][0] == num[cross] && b[1][0] == num[cross] && b[2][0] == num[cross] ||
            b[0][1] == num[cross] && b[1][1] == num[cross] && b[2][1] == num[cross] ||
            b[0][2] == num[cross] && b[1][2] == num[cross] && b[2][2] == num[cross]) {
            return 2;
        }
    }
    void game::makemove() {
        if (count % 2 == 0){
            cout << "Please, enter the position on the board" << endl;
            cin >> row;
            cin >> col;
            b[row][col] = num[zero];
        }
        else {
            cout << "Please, enter the position on the board" << endl;
            cin >> row;
            cin >> col;
            b[row][col] = num[cross];
        }
    }
    void game::process() {
        while (1) {
            if (check() == 1) { cout << "First player has won" << endl; break; }
            if (check() == 2) { cout << "Second player has won" << endl; break; }
            makemove();
            print();
            system("cls");
            print();
            ++count;
        }
    }
    void game::play() {
        numcreate();
        create();
        process();
    }
    game one;
    one.size = 3;
    one.play();
    cin.ignore();
    cin.get();
}

你能说,我错在哪里吗?在我的电子书中,我看到了相同的语法

你的问题是你在main()定义你的函数:

int main() {
    struct game {
        ...
    };
    void game::create() { .. }
}

只需将所有这些移到main()之外

struct game { .. };
void game::numcreate() { .. }
int main() {
    // now use game
}