C ++ Object Undeclared Identifier

时间:2016-05-16 19:31:06

标签: c++ visual-studio visual-studio-2015

我不是代码的新手,但我是视觉工作室。对于我的生活,我无法弄清楚为什么我会收到以下语法错误。代码拒绝允许我声明对象Match m = new Match();

Main.cpp的

#include <iostream>
#include <string>
#include <time.h>
#include "Match.h"
#include "stdafx.h"

using namespace std;

const int NUM_TRIALS = 100000;

int main()
{
    Match m = new Match();
    printf("Program begin\n");
    for (int i = 0; i < 200; i++) {
        m = Match();
        printf("%s ... %s\n", m.to_str123().c_str(), m.printStr.c_str());
    }
    printf("Program end.\n");
    return 0;
}

Match.h

#pragma once
#ifndef MATCH_H_
#define MATCH_H_
#include <string>
#include <iostream>
#include <time.h>

using namespace std;

#define HERO_PER_TEAM 3
#define NUM_HERO 10

class Match {
public:
    Match();
    ~Match();

    string to_str123();
    string printStr();

private:
    char teams[HERO_PER_TEAM * 2];
};

#endif

错误消息

Error   C2065   'Match': undeclared identifier  ConsoleApplication1 
Error   C2146   syntax error: missing ';' before identifier 'm' ConsoleApplication1 
Error   C2065   'm': undeclared identifier  ConsoleApplication1 
Error   C2061   syntax error: identifier 'Match'    ConsoleApplication1
Error   C2065   'm': undeclared identifier  ConsoleApplication1 
Error   C3861   'Match': identifier not found   ConsoleApplication1 
Error   C2065   'm': undeclared identifier  ConsoleApplication1 
Error   C2228   left of '.to_str123' must have class/struct/union   ConsoleApplication1 
Error   C2228   left of '.c_str' must have class/struct/union   ConsoleApplication1 
Error   C2228   left of '.printStr' must have class/struct/union    ConsoleApplication1

2 个答案:

答案 0 :(得分:2)

您正在使用new为非指针类型指定值。如果你想要一个指针,你可以使用:

Match* m = new Match();

否则,只需声明如下:

Match m;

由于m未被识别为对象,因此您也会收到所有其他错误。

此外,您应该可以使用#pragma once代替标准的包含警卫。

答案 1 :(得分:0)

new运算符使用给定的构造函数返回指向初始化对象的指针。你在这里做的是java语法。要正确执行此操作,您必须创建指向该类型对象的指针:Match *m = new Match();。然后,您不必使用m.printStr而是使用m->printStr而不必忘记删除使用delete m分配的内存。或者您可以使用Match m();Match m = Match()将其分配到堆栈中。然后,您仍然可以使用m.printStr表单,而不必担心删除内存。