所以,我有2个文件:
程序在大约20-24小时之前完美运行(我甚至有可执行文件),我决定排除DFH_lib.cpp文件,因为它实际上是空的(见下文)并且瞧!它给了我
声明语法错误
在顶部模板函数的第一行。
这非常烦人,我因为我的学校而被Turbo困住,现在这个基于模板的头文件我花了几周时间才开始编译。
这是DFH_lib.h文件的启动方式(不包括多行注释):
#ifndef DFH_lib_H
#define DFH_lib_H
enum bool { false, true };
template <class T> //Error on this line
void AddColumn(T data, const int& width) {
cout<<setw(width)<<data<<" | ";
}
注意:编译DFH_lib.h时出错:
在将DFH_lib.cpp文件添加到项目中时,除此之外别无其他:
#ifndef _DFH_lib_CPP
#define _DFH_lib_CPP
#include"DFH_lib.h"
#if !defined __FSTREAM_H
#include<fstream.h>
#endif
#if !defined __IOMANIP_H
#include<iomanip.h>
#endif
#if !defined __CONIO_H
#include<conio.h>
#endif
#if !defined __STDIO_H
#include<stdio.h>
#endif
#if !defined __STRING_H
#include<string.h>
#endif
#endif
一切正常! 为什么会这样? 在包含DFH_lib.h之前,所有用DFH_lib.cpp编写的头文件都已包含在lib_Test.cpp中。
在我看来,DFH_lib.cpp文件什么都不做,但它似乎很重要。
P.S。 - 如果这是重复我道歉,我知道this question存在,但我无法将其与我的情况联系起来。在这里,.cpp实际上是空的,但仍然需要。
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include"fileio.h"
void fillSpace(char ch, const int& width) {
cout<<setw(width)<<setfill(ch)<<"|";
}
int record_id = 1;
char char_member = 'A';
int int_member = 12;
float float_member = 2.3;
void show_tablular() {
cout<<endl; AddColumn(record_id,7); AddColumn(char_member, 20); AddColumn(int_member, 11); AddColumn(float_member, 13);
}
void main()
{
clrscr();
cout<<endl; AddColumn("Record", 7); AddColumn("Char Member", 20); AddColumn("Int Member", 11); AddColumn("Float Member", 13);
cout<<endl; AddColumn(" ", 7); AddColumn(" ", 20); AddColumn(" ", 11); AddColumn(" ", 13);
show_tablular();
cout<<endl; fillSpace('_', 7+2); fillSpace('_', 20+3); fillSpace('_', 11+3); fillSpace('_', 13+3);
cout<<setfill(' '); //Normalize cout based outputting format
getch();
}
#include"fileio.h"
#if !defined __FSTREAM_H
#include<fstream.h>
#endif
#if !defined __IOMANIP_H
#include<iomanip.h>
#endif
#if !defined __CONIO_H
#include<conio.h>
#endif
#if !defined __STDIO_H
#include<stdio.h>
#endif
#if !defined __STRING_H
#include<string.h>
#endif
#ifndef file_H
#define file_H
enum bool { false, true };
template <class T>
void AddColumn(T data, const int& width) {
cout<<setw(width)<<data<<" | ";
}
#endif
注意:它们仅在从上到下以相同顺序添加到项目中时才起作用,否则会遇到上述错误。