我在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
答案 0 :(得分:0)
您的cmdtree.cpp似乎缺少以下内容:
#include "cmdtree.h"
它不会自动包含,因为它与.cpp文件具有相同的根文件名。
另外,放置“using namespace std;”并不是一个好主意。在头文件中。而是在标题中明确使用std :: string,然后你可以把“using namespace std;”在.cpp文件中。