工作模板头文件,不再工作了

时间:2017-09-11 04:42:04

标签: c++ templates header-files turbo-c++

所以,我有2个文件:

  • DFH_lib.h
  • Lib_Test.cpp

程序在大约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实际上是空的,但仍然需要。

我放在一起的快速MCVE:

UTILIZATION FILE

#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();
}

IMPLEMENTATION FILE

#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

HEADER FILE

#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

注意:它们仅在从上到下以相同顺序添加到项目中时才起作用,否则会遇到上述错误。

0 个答案:

没有答案