双重声明c ++

时间:2013-06-23 13:32:23

标签: c++ oop

所以我在几个文件中有一些代码: cells.cpp:

#include "cells.h"
#include <iostream>
using namespace std;

char convertIntChar (int symbolNumber)
{
    char charR;
    switch (symbolNumber)
    {
    case 0:
        charR='0';
        break;
// lust of case code here
    case 63:
        charR='\\';
        break;
    }
    return charR;
}

class cell
{
public:
    int iPosition;
    char chPosition;
    cell ()
    {
        static int i = -1;
        i++;
        chPosition=convertIntChar (i);
        iPosition=i;
        cout << " " << iPosition;  //two lines of code to test 
        cout << " " << chPosition; //constructor
    }
protected:
};

的main.cpp

#include <iostream>
#include "cells.h"
#include "pointer.h"
using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    createPointer();
    cell cells[64];
    return 0;
}

并且明显是一个细胞。

#ifndef CELLS_H_INCLUDED
#define CELLS_H_INCLUDED
#pragma once
class cell
char convertIntChar(int symbolNumber);
#endif // CELLS_H_INCLUDED

我有一个听起来像的错误 // filepath \ | 5 | error:声明'convertIntChar'|中的两个或多个数据类型 || ===构建完成:1个错误,0个警告(0分7秒)=== | 它能成为什么样的人。抱歉,无论如何,对于noob问题。

2 个答案:

答案 0 :(得分:2)

首先,这个前向声明需要一个分号:

class cell;
//        ^

其次,你不能在这里使用前瞻声明。 main.cpp需要查看cell类定义。所以你应该把定义放在cells.h中。例如:

cells.h

#ifndef CELLS_H_INCLUDED
#define CELLS_H_INCLUDED
class cell
{
public:
    int iPosition;
    char chPosition;
    cell ();
};

char convertIntChar(int symbolNumber);

#endif

cells.cpp

#include "cells.h"
#include <iostream>

char convertIntChar (int symbolNumber)
{
    char charR;
    // as before
    return charR;
}


cell::cell ()
{
    static int i = -1;
    i++;
    chPosition=convertIntChar (i);
    iPosition=i;
    std::cout << " " << iPosition;  //two lines of code to test 
    std::cout << " " << chPosition; //constructor
}

答案 1 :(得分:0)

你在cpp文件中有class cell,它应该进入.h文件。

然后在cells.h中,您在;之后错过class cell

在cell.h中的前向声明的Insterad,把课程放在那里。