错误:变量或字段'functionName'声明为void

时间:2014-10-26 00:42:14

标签: c++ compiler-errors header-files

我在C ++头文件中有以下内容,如下所示。

cmdtree.h:

#ifndef CMDTREE_H
#define CMDTREE_H

#include <iostream>
#include <fstream>
#include <string>
#include "functions.h"      // different header where some functions are
#include "classes.h"        // different header where classes are
using namespace std;

void printLine(string filename, int line);
void cmd_ask_name();
void cmd_look_suspect();

#endif  /* CMDTREE_H */

然后,在.cpp源文件中,我有以下类型完全,如下所示(为简洁起见,其他一些无关函数的填充符被删除)。没有包括,除了这里显示的内容之外别无其他。我也想知道,如果 是正确的决定,但我已经尝试了几种不同的方式,所以我只是认为我会给你最简洁的错误版本:

cmdtree.cpp:

void printLine(string filename, int line)
{
    char        descrip[11][500] = {0};
    char        *ch_arr = descrip[0];
    fstream     text;
    int         y = 0;

    cout << "\nfile: " << filename << " line: " << line << endl;

    text.open(filename,ios::in);
    if (!text.is_open()) {         
        cout << "\nCould not open " << filename << "." << endl;
    } else {
        while (!text.eof())
        {
            ch_arr = descrip[y];
            text.getline(ch_arr,500);
            y++;
        }                
    }
    text.close();
    ch_arr = descrip[line];
    cout    << " " << ch_arr << endl;

}

void cmd_ask_name() 
{      

}

void cmd_look_suspect()     // look suspect
{

}

编译后,我收到以下错误。原因对我来说并不明显 - 我已经包含在头文件中了。当我在cpp文件本身的顶部包含字符串时,我甚至会收到错误。

mkdir -p build/Debug/Cygwin_4.x-Windows
rm -f "build/Debug/Cygwin_4.x-Windows/cmdtree.o.d"
g++    -c -g -std=c++11 -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/cmdtree.o.d" -o build/Debug/Cygwin_4.x-Windows/cmdtree.o cmdtree.cpp
cmdtree.cpp:3:16: error: variable or field 'printLine' declared void
 void printLine(string filename, int line)
                ^
cmdtree.cpp:3:16: error: 'string' was not declared in this scope
cmdtree.cpp:3:33: error: expected primary-expression before 'int'
 void printLine(string filename, int line)
                                 ^
nbproject/Makefile-Debug.mk:70: recipe for target 'build/Debug/Cygwin_4.x-Windows/cmdtree.o' failed
make[2]: *** [build/Debug/Cygwin_4.x-Windows/cmdtree.o] Error 1

1 个答案:

答案 0 :(得分:0)

您的cmdtree.cpp似乎缺少以下内容:

#include "cmdtree.h"

它不会自动包含,因为它与.cpp文件具有相同的根文件名。

另外,放置“using namespace std;”并不是一个好主意。在头文件中。而是在标题中明确使用std :: string,然后你可以把“using namespace std;”在.cpp文件中。