令牌之前的预期主表达式'-'

Expected primary-expression before '-' token

本文关键字:表达式 令牌      更新时间:2023-10-16

但是我的代码中没有这个标记('-')。我所做的只是尝试分配一个colors枚举类类型的变量,这是每种情况下colors的可能值之一,并且出现此错误:

error: expected primary-expression before '-' token

在每个案例陈述的每个第一个陈述中。有人可以解释此错误以及为什么会发生吗?

完整代码:

源文件

#include "Bunny.h"
#include <cstdlib>
#include <time.h>
#include <string>
#include <iostream>
using namespace std;
Bunny::Bunny() : radioactive_mutant_vampire_bunny(false), age(0)
{
    srand(time(NULL));
    if(rand()%100 + 1 <= 2)
        radioactive_mutant_vampire_bunny = true;
    switch(rand()%4 + 1){
    case 1:
        color = colors.WHITE;
        break;
    case 2:
        color = colors.BROWN;
        break;
    case 3:
        color = colors.BLACK;
        break;
    case 4:
        color = colors.SPOTTED;
        break;
    default:
        cout << "The number entered is outside the range of 1 to 4.";
        break;
    }
    name = names[rand()%names.size()];
}
Bunny::~Bunny()
{
    //dtor
}

页眉

#ifndef BUNNY_H
#define BUNNY_H
#include <string>
using namespace std;
class Bunny
{
    public:
        Bunny();
        virtual ~Bunny();
    protected:
    private:
        enum class sex{MALE, FEMALE};
        sex sex;
        enum class colors{WHITE, BROWN, BLACK, SPOTTED};
        colors color;
        int age;
        string names[6] = {"Berry", "Jerry", "Terry", "Marie", "Perry", "Kerry"};
        string name;
        bool radioactive_mutant_vampire_bunny;
};
#endif // BUNNY_H
  • colors.WHITE是Java风格。在C++你应该像colors::WHITE一样写.
  • names.size()无效names因为它不是一个类,而是一个数组。

试试这个:

Bunny::Bunny() : radioactive_mutant_vampire_bunny(false), age(0)
{
    srand(time(NULL));
    if(rand()%100 + 1 <= 2)
        radioactive_mutant_vampire_bunny = true;
    switch(rand()%4 + 1){
    case 1:
        color = colors::WHITE;
        break;
    case 2:
        color = colors::BROWN;
        break;
    case 3:
        color = colors::BLACK;
        break;
    case 4:
        color = colors::SPOTTED;
        break;
    default:
        cout << "The number entered is outside the range of 1 to 4.";
        break;
    }
    name = names[rand()%(sizeof(names)/sizeof(*names))];
}
    enum class sex{MALE, FEMALE};
    sex sex;

enum class的名称是sex,您不能再次使用sex,重命名您的成员:sex _sex;

case 1:
    color = colors.WHITE;
    break;
case 2:
    color = colors.BROWN;
    break;
case 3:
    color = colors.BLACK;
    break;
case 4:
    color = colors.SPOTTED;
    break;

这不是enum classes的工作方式。使用 :: 运算符而不是 . 运算符。

您的strings数组是纯 C 数组,纯数组没有size()方法,要么使其成为vector,要么使用 sizeof 习惯用法检查数组长度。