2017-02-20 15 views
-3

我是C++新手(不是一般的編程,只是C++),我正在學習使用C++編程並訂閱Pluralsight。我正在編寫一個練習程序(通過電腦控制檯進行的一系列遊戲),我被困在某些東西上。在製作Tic-Tac-Toe遊戲時,我想要給董事會提供一個公式,我不必每次重寫。因此我定義了一組字符串爲我工作,但我無法弄清楚如何調用我的用戶定義公式。我不會發布所有的代碼,因爲它很長,但我會顯示你需要的部分(如果一行有「....」,這意味着我刪除了多行代碼使它適合這個網站更好)。 Incase你想知道,我正在使用Microsoft Visual Studio社區2017 RCC++ 14如何在C++中調用用戶定義的代碼

頭文件:

#pragma once 
#include "targetver.h" 
#include <stdio.h> 
#include <tchar.h> 
#include <iostream> 
#include <string> 
using namespace std; 

主文件:

....

#define TTTBoard() \ 
{ \ 
    system("cls"); \ 
    cout << "\n\n       Let's play Tic-Tac-Toe!\n\n\n"; \ 
    cout << "        A  B  C " << endl; \ 
    cout << "       _______________________ " << endl; \ 
    cout << "       |  |  |  |" << endl; \ 
    cout << "      1 | " << PlayerSymA1 << " | " << PlayerSymB1 << " | " << PlayerSymC1 << " |" << endl; \ 
    cout << "       |_______|_______|_______|" << endl; \ 
    cout << "       |  |  |  |" << endl; \ 
    cout << "      2 | " << PlayerSymA2 << " | " << PlayerSymB2 << " | " << PlayerSymC2 << " |" << endl; \ 
    cout << "       |_______|_______|_______|" << endl; \ 
    cout << "       |  |  |  |" << endl; \ 
    cout << "      3 | " << PlayerSymA3 << " | " << PlayerSymB3 << " | " << PlayerSymC3 << " |" << endl; \ 
    cout << "       |_______|_______|_______|" << endl; \ 
} 

....

int main() 
{ 
    //This is where I want to call my TTTBoard formula 
} 

我試圖調用它多種方式,但沒有任何工作。以下是我已經嘗試過的。我知道我所嘗試的一些東西並不完全合理,但我很煩惱,我無法使其工作,所以無論如何我都試過了。

TTTBoard 

TTTBoard; 

TTTBoard() 

TTTBoard(); 

TTTBoard() 
{ 
} 

TTTBoard(); 
{ 
} 

預先感謝您的幫助!

回答

4

預處理器宏不是調用。相反,它們是擴展了,這意味着宏的主體插入代替宏調用,替換參數。

所以,如果你有一個像

#define FOO() { \ 
    bar();  \ 
} 

宏,然後用它

int main() 
{ 
    FOO() 
} 

什麼預處理器創建和編譯器看到的是

int main() 
{ 
    { bar(); } 
} 

上面的例子還顯示如何使用類似功能的宏。

最後,你不需要宏。在像你這樣的情況下,使用實際功能更有意義。在現代C++中,宏很少需要。

+0

**一些程序員老兄:**首先,謝謝你這麼快回答!其次,我插入我的代碼我主要的代碼中,你是如何發現: 「TTTBoard()」 ,我收到以下錯誤: 錯誤(活動)\t E0029 \t預期的expressionError \t C2059 \t語法錯誤:「)」 \t 錯誤C2143語法錯誤:缺少';'之前'{' 第三,你說我不需要宏,但我不想一遍又一遍地重寫我的板代碼。這就是我創建TTTBoard定義的原因。是否有另一種方法將代碼插入到我的程序中,而不必一遍又一遍地重寫它? –

+0

@ StephenR.Hayes所有編譯器前端程序在預處理器步驟後都會有一個選項停止,因此您可以檢查預處理代碼。對於GCC,它使用'-E'選項完成(如'g ++ -E source-file.cpp -o preprocessed-source.cpp')。如果你創建了一個函數,你爲什麼需要「重寫」你的代碼?與使用宏相比,不需要再進行「重寫」。 –

+0

關於重寫,我的意思是我使用宏,因爲每次玩家選擇放置X或O的位置時,我都需要一直打電話給董事會,我不想重寫它。此外,我無法找到如何停止並使用我的程序(Microsoft Visual Studio Community 2017 RC)檢查預處理代碼。我很抱歉成爲一個麻煩,並感謝你的幫助。我通常可以很容易地找出代碼;這是我第一次不得不向別人提問(在我的大學教授以外)。所以我對自己感到惱火,因爲沒有弄清楚這一點。 –

相關問題