问题遇到的现象和发生背景
三个文件
Cirqueue_main.cpp
Cirqueue.cpp
Cirqueue.h
Cirqueue.cpp(出问题的地方):
# include <iostream>
# include "CirQueue.h"
using namespace std;
// 入队操作
template <typename DataType> void CirQueue<DataType>::EnQueue(DataType x)
{
if (Len == MaxSize)
{
cout << "队列已满,入队失败" << endl;
return;
}
Rear = (Rear + 1) % MaxSize; // 队尾指针在循环意义上+1
sequ[Rear] = x;
Len++;
}
// 出队操作
template <typename DataType> DataType CirQueue<DataType>::DeQueue()
{
if (Len == 0) {
return ' ';
int i = ((Rear + MaxSize) - Len + 1) % MaxSize; // 获取队列第一个元素的下标
Len--;
return sequ[i];
}
// 输出当前队列有多少元素
template <typename DataType> int CirQueue<DataType>::GetLen()
{
return Len;
}
// 计算当前队列中有多少个char类型字符
template <typename DataType> int CirQueue<DataType>::Statcahr(char a)
{
int count = 0, j = ((Rear + MaxSize) - Len + 1) % MaxSize; // 统计char a的个数 , 获取第一个元素下标
for (int i = 0; i < Len; i++)
{
if (sequ[j] == a)
{
j++;
}
}
return count;
}
// 将队列中所有元素出队
template <typename DataType> void CirQueue<DataType>::DeAll()
{
int j = Len;
for (int i = 0; i < j; i++)
{
cout << DeQueue();
}
}
}
Cirqueue_main.cpp:
#include "CirQueue.cpp"
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
CirQueue<char> awaitcar; // awaitcar等待上船的客车队列
CirQueue<char> awaittruck; // awaittruck等待上船的货车队列
// 函数功能:渡船
void ship()
{
CirQueue<char> ship10; // 定义船
// 设置 3 个变量标识已上渡船的客车数量 busNum、货车数量 truckNum 和总数量 totalNum
int busNum, truckNum, totalNum, j = 0; // j代表第几辆船
while (awaitcar.GetLen() != 0 || awaittruck.GetLen() != 0) // 如果岸上还有车那么就循环
{
busNum = 0, truckNum = 0, totalNum = 0;
while (totalNum < 10) // 如果船没有满,那么就可以上船
{
if (busNum < 4 && awaitcar.GetLen() != 0) // 船上的客车没满4辆并且岸上还有客车
{
ship10.EnQueue(awaitcar.DeQueue()); // 那么就上一辆客车
busNum++;
totalNum++;
}
else if (busNum < 4 && awaitcar.GetLen() == 0) // 船上的客车没满4辆并且岸上没有客车
{
ship10.EnQueue(awaittruck.DeQueue()); // 那么就上一辆货车
truckNum++;
totalNum++;
busNum = 0;
}
else if (busNum >= 4 && awaittruck.GetLen() != 0)// 如果穿上已经上了四辆客车并且岸上还有货车
{
ship10.EnQueue(awaittruck.DeQueue()); // 那么就上一辆货车
truckNum++;
totalNum++;
busNum = 0;
}
else if (busNum >= 4 && awaittruck.GetLen() == 0)// 如果穿上已经上了四辆客车并且岸上没有货车
{
ship10.EnQueue(awaitcar.DeQueue()); // 那么就上一辆客车
busNum++;
totalNum++;
}
}
j++;
cout << "这是第" << j << "辆船,船上的装载情况为:";
ship10.DeAll();
ship10.~CirQueue();
totalNum = 0;
cout << endl;
}
}
int main(void)
{
int alltruck, allcar; // alltruck等待上船的货车数量, allcar等待上船的客车数量
while (true) // 为了测试数据方便,这里设置为永真
{
cout << "请输入当前正在等待上船的客车数量:";
cin >> allcar;
cout << "请输入当前正在等待上船的货车数量:";
cin >> alltruck;
for (int i = 0; i < allcar; i++) // * 代表客车
{
awaitcar.EnQueue('*');
}
for (int i = 0; i < alltruck; i++) // # 代表货车
{
awaittruck.EnQueue('#');
}
ship();
cout << endl;
awaitcar.~CirQueue();
awaittruck.~CirQueue();
}
system("pause");
return 0;
}
Cirqueue.h:
#pragma once
#ifndef SeqList_H
#define SeqList_H
const int MaxSize = 300;
template <typename DataType> class CirQueue
{
public:
CirQueue() // 构造函数,初始化队列
{
Len = 0;
Rear = MaxSize - 1;
}
~CirQueue() // 析构函数
{
Len = 0;
Rear = MaxSize - 1;
}
void EnQueue(DataType x); // 入队操作
DataType DeQueue(); // 出队操作
int GetLen(); // 返回队列中元素的个数
int Statcahr(char a); // 计算当前队列中有多少个char类型字符
void DeAll(); // 将队列中所有元素出队
private:
DataType sequ[MaxSize]; // 存放队列元素的数组
int Len, Rear; // 队尾元素的位置和内含元素的个数
};
# endif
问题相关代码,请勿粘贴截图
// 输出当前队列有多少元素
template <typename DataType> int CirQueue<DataType>::GetLen()
{
return Len;
}
运行结果及报错内容
已启动生成…
1>------ 已启动生成: 项目: Cirqueue, 配置: Debug Win32 ------
1>Cirqueue.cpp
1>C:\Users\93634\source\repos\Cirqueue\Cirqueue\Cirqueue.cpp(30,2): error C2760: 语法错误: 意外标记 "template",应为 "语句"
1>Cirqueue_main.cpp
1>C:\Users\93634\source\repos\Cirqueue\Cirqueue\CirQueue.cpp(30,2): error C2760: 语法错误: 意外标记 "template",应为 "语句"
1>正在生成代码...
1>已完成生成项目“Cirqueue.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
我的解答思路和尝试过的方法
我不理解O.O
error 2760这个问题网上找的和我情况不太一样,他们说改符合模式,我改了反而报了更多的错
我想要达到的结果
代码跑起来