2017-02-20 69 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)检查预处理代码。我很抱歉成为一个麻烦,并感谢你的帮助。我通常可以很容易地找出代码;这是我第一次不得不向别人提问(在我的大学教授以外)。所以我对自己感到恼火,因为没有弄清楚这一点。 –

相关问题