在主

时间:2018-11-19 08:38:54

标签: c++

所以我的程序有三个文件。 我的main.cpp看起来像这样:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include "dtt0055HW4func.cpp"
#include "dtt0055HW4func.h"
using namespace std;
int main()
{   
    int size = 7;
    char (*boardOfGame)[7] = new char[7][7];
    int* sizeOfBoardGame = NULL;
    sizeOfBoardGame = &size;
    initializeBoardGame(boardOfGame, sizeOfBoardGame);
    return 0;
}

我的func.h看起来像这样:

#ifndef dtt0055HW4func 
#define dtt0055HW4func 

enum typeOfTiles{CROSS = '+', HORIZONTAL = '-', VERTICAL = '|', LOCKED = 'X', EMPTY};
enum colorOfTiles{RED, BLUE};
struct tile{
    typeOfTiles newTile;
    colorOfTiles newTileColor;
    int positionOfNewTile;
};
void initializeBoardGame(char (*boardOfGame)[7],int* sizeOfBoard);

#endif

感谢您在第一个错误方面的帮助。我已经修改了程序,并在func.cpp中给了我一个新问题。现在我的func.cpp看起来像这样:

#include "dtt0055HW4func.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

void initializeBoardGame(char (*boardOfGame)[7],int* sizeOfBoard)
{
    char nameOfFile[30],c;
    ifstream inFS;

    cout << "Please enter the name of the input file: ";
    cin >> nameOfFile;

    inFS.open(nameOfFile);
    if (inFS.fail())
    {
        while(inFS.fail())
        {
            cout << "Unable to open the file, please enter the name of the file again. " << endl;
            cin >> nameOfFile;
            inFS.open(nameOfFile);
        }
    }

    while (!inFS.eof())
    {
        for (int i = 0; i < *sizeOfBoard; i++)
        {
            for (int j = 0; j < *sizeOfBoard; j++)
            {
                boardOfGame[i][j] = &inFS.get(c);
                cout << boardOfGame[i][j];
            }
            cout << endl;
        }
    }
    inFS.close();
}

现在我的编译器在func.cpp中给我一个错误 错误:从“ std :: basic_istream :: __ istream_type * {aka std :: basic_istream *}”到“ char”的无效转换[-fpermissive]      boardOfGame [i] [j] =&inFS.get(c); 我在这一行中想要做的就是将文件中的一个字符分配给数组的一个索引。如果我使用boardOfGame [i] [j] = inFS.get(c);,它将给我更多错误。

2 个答案:

答案 0 :(得分:3)

包含保护仅属于头文件,删除

#ifndef dtt0055HW4func
#define dtt0055HW4func

#endif

来自func.cpp。因为它在此检查之前在顶部包括func.h,所以已经定义了防护措施,并跳过了其余的func.cpp

也永远不要.cpp d实现文件(#include)。它们应直接提供给编译器。删除#include "dtt0055HW4func.cpp"

答案 1 :(得分:2)

您可以将ifndef替换为#pragma once,它将为您工作。

您不应包含cpp文件,而应仅包含标题。

使用(在Linux上):

g++ -c file.cpp -o file.o
g++ -c main.cpp -o main.o
g++  main.o file.o -o program 

这将从2个cpp文件构建项目。