qq_50942349 2021-12-01 18:15 采纳率: 100%
浏览 229
已结题

error C2760: 语法错误: 意外标记 "template",应为 "语句",符合

问题遇到的现象和发生背景

三个文件
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这个问题网上找的和我情况不太一样,他们说改符合模式,我改了反而报了更多的错

我想要达到的结果

代码跑起来

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-12-01 18:30
    关注

    上面那个函数少了后边的大括号
    60行的大括号放错地方了,放到29行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理