我不是代码的新手,但我是视觉工作室。对于我的生活,我无法弄清楚为什么我会收到以下语法错误。代码拒绝允许我声明对象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
答案 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
表单,而不必担心删除内存。