2016-05-16 102 views
0

我不是新手代碼,但我是Visual Studio。對於我的生活,我無法弄清楚爲什麼我得到以下語法錯誤。該代碼拒絕讓我聲明一個對象Match m = new Match();C++對象未聲明標識符

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

它只能是C **或** C++,所以我刪除了C標籤。 –

+4

使用'#pragma once'或宏包含守衛,而不是兩者。 –

+5

'Match m = new Match();' - >'Match * mPtr = new Match();'。或者只是'匹配m;'使用名稱空間標準;' –

回答

2

您正在使用新的作爲將值標記爲非指針類型。如果你想有一個指針,你可以使用:

Match* m = new Match(); 

否則,只是聲明它是這樣的:

Match m; 

由於m沒有被識別爲你所得到的所有其他錯誤太多的對象。

此外,您應該能夠使用#pragma once來代替標準的防護罩。

+0

不是所有的錯誤。 'printStr'函數被用作一個變量。需要'()'。 – user4581301

+0

謝謝,我刪除了新的但我仍然繼續得到'Match': undeclared identifier錯誤。 –

+0

這將表明編譯器找不到您的類。試試我通過刪除標準包括守衛和只使用'#pragma'建議。 –

0

new運算符使用給定的構造函數返回一個指向初始化對象的指針。你在這裏做的是java語法。要正確執行此操作,必須創建一個指向該類型對象的指針:Match *m = new Match();。然後,使用m.printStr而不是使用m->printStr,並且不要忘記刪除使用delete m分配的內存。或者你可以簡單地使用Match m();Match m = Match()將它分配到堆棧上。然後你仍然可以使用表格m.printStr,你不必擔心刪除內存。