类到另一个类的实例化:Java到C++;转化 每个人,我需要帮助把java中的一些代码转换成C++。我如何将类从java到C++的实例化为私有类型?这就是我的意思,我有几行代码:

类到另一个类的实例化:Java到C++;转化 每个人,我需要帮助把java中的一些代码转换成C++。我如何将类从java到C++的实例化为私有类型?这就是我的意思,我有几行代码:,java,c++,Java,C++,第一个问题:解决了 第二个问题:这个java代码是我想要转换的,你认为我的代码有什么错误 Java的原始代码: public class ClueReasoner { private int numPlayers; private int playerNum; private int numCards; private SATSolver solver; private String caseFile = "cf"; private String[] players = {"sc",

第一个问题:解决了

第二个问题:这个java代码是我想要转换的,你认为我的代码有什么错误

Java的原始代码:

public class ClueReasoner 
{
private int numPlayers;
private int playerNum;
private int numCards;
private SATSolver solver;    
private String caseFile = "cf";
private String[] players = {"sc", "mu", "wh", "gr", "pe", "pl"};
private String[] suspects = {"mu", "pl", "gr", "pe", "sc", "wh"};
private String[] weapons = {"kn", "ca", "re", "ro", "pi", "wr"};
private String[] rooms = {"ha", "lo", "di", "ki", "ba", "co", "bi", "li", "st"};
private String[] cards;

public ClueReasoner()
{
    numPlayers = players.length;

    // Initialize card info
    cards = new String[suspects.length + weapons.length + rooms.length];
    int i = 0;
    for (String card : suspects)
        cards[i++] = card;
    for (String card : weapons)
        cards[i++] = card;
    for (String card : rooms)
        cards[i++] = card;
    numCards = i;

    // Initialize solver
    solver = new SATSolver();
    addInitialClauses();
}

private int getPlayerNum(String player) 
{
    if (player.equals(caseFile))
        return numPlayers;
    for (int i = 0; i < numPlayers; i++)
        if (player.equals(players[i]))
            return i;
    System.out.println("Illegal player: " + player);
    return -1;
}

private int getCardNum(String card)
{
    for (int i = 0; i < numCards; i++)
        if (card.equals(cards[i]))
            return i;
    System.out.println("Illegal card: " + card);
    return -1;
}

private int getPairNum(String player, String card) 
{
    return getPairNum(getPlayerNum(player), getCardNum(card));
}

private int getPairNum(int playerNum, int cardNum)
{
    return playerNum * numCards + cardNum + 1;
}    
public class ClueReasoner
{
私人雇员;
私人娱乐中心;
私人国际货币基金组织;
私人卫星解算器;
私有字符串caseFile=“cf”;
私有字符串[]播放器={“sc”、“mu”、“wh”、“gr”、“pe”、“pl”};
私有字符串[]可疑={“mu”、“pl”、“gr”、“pe”、“sc”、“wh”};
私有字符串[]武器={“kn”、“ca”、“re”、“ro”、“pi”、“wr”};
私人字符串[]房间={“ha”、“lo”、“di”、“ki”、“ba”、“co”、“bi”、“li”、“st”};
私人字符串[]卡;
公共俱乐部创办人()
{
numPlayers=players.length;
//初始化卡信息
卡片=新字符串[嫌疑犯.长度+武器.长度+房间.长度];
int i=0;
用于(字符串卡:可疑)
卡片[i++]=卡片;
用于(字符串卡:武器)
卡片[i++]=卡片;
用于(字符串卡:房间)
卡片[i++]=卡片;
numCards=i;
//初始化解算器
解算器=新解算器();
额外费用();
}
私人int getPlayerNum(字符串播放器)
{
if(player.equals(案例文件))
返乡职工;
for(int i=0;i
我的代码:

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

void Scene_Reasoner() {
int numPlayer;
int playerNum;
int cardNum;
 string filecase = "Case: ";
 string players [] = {"sc", "mu", "wh", "gr", "pe", "pl"};
 string suspects [] = {"mu", "pl", "gr", "pe", "sc", "wh"};
string weapons []  = {"kn", "ca", "re", "ro", "pi", "wr"};
 string rooms[] = {"ha", "lo", "di", "ki", "ba", "co", "bi", "li", "st"};
 string cards [0];
};

void Scene_Reason_Base () {
    numPlayer = players.length;

    // Initialize card info
    cards = new String[suspects.length + weapons.length + rooms.length];
    int i = 0;
    for (String card : suspects)
        cards[i++] = card;
    for (String card : weapons)
        cards[i++] = card;
    for (String card : rooms)
        cards[i++] = card;
    cardNum = i;
    };

    private int getCardNum (string card) {
            for (int i = 0; i < numCards; i++)
        if (card.equals(cards[i]))
            return i;
    cout << "Illegal card: " + card <<endl;
    return -1;
    };

     private int getPairNum(String player, String card)
   {
    return getPairNum(getPlayerNum(player), getCardNum(card));
};

  private int getPairNum(int playerNum, int cardNum)
  {
    return playerNum * numCards + cardNum + 1;
};

int main () {
return 0;
}
#包括
#包括
#包括
使用名称空间std;
void Scene_Reasoner(){
整数层;
int playerNum;
int-cardNum;
字符串filecase=“Case:”;
弦乐演奏者[]={“sc”、“mu”、“wh”、“gr”、“pe”、“pl”};
字符串疑点[]={“mu”、“pl”、“gr”、“pe”、“sc”、“wh”};
弦武器[]={“kn”、“ca”、“re”、“ro”、“pi”、“wr”};
弦乐室[]={“ha”、“lo”、“di”、“ki”、“ba”、“co”、“bi”、“li”、“st”};
串卡[0];
};
无效场景\原因\基础(){
numlayer=players.length;
//初始化卡信息
卡片=新字符串[嫌疑犯.长度+武器.长度+房间.长度];
int i=0;
用于(字符串卡:可疑)
卡片[i++]=卡片;
用于(字符串卡:武器)
卡片[i++]=卡片;
用于(字符串卡:房间)
卡片[i++]=卡片;
cardNum=i;
};
私有int getCardNum(字符串卡){
对于(int i=0;iCUT

你有没有在C++中实现SATSOVER?如果是的话,有一个示例代码:

class Foo
{
private:
    int numPlayers;
    int playerNum;
    int numCards;
    SATSolver solver;

    // etc
};

如果您想在另一个类中声明
SATSOlver
的私有实例,可以这样做:

文件SATSolver.h

class SATSolver {
// methods, members, etc....
};
文件Foo.h

#include "SatSolver.h" // get the SATSolver declaration

class Foo
{

 private: // everything that follows is private access

  SATSolver solver;

 public: // from here on, everything is public
  // more code

 private: // and now, all that follows is private again
  // stuff
}
<>注意,C++访问标识符只允许在类或结构中使用,不能在函数内或类或结构之外的限定类型或值中使用它们。

<强>注在C++中,默认的<<代码>类< /C>具有私用访问(继承,但超出了这个问题的范围):

class Bar {
  SATSolver solver; // private
}

<你的代码打破了我们的转换器——我们修复了它,编译的C++等价物如下:

#include <string>

class ClueReasoner
{
private:
    int numPlayers;
    int playerNum;
    int numCards;
    SATSolver *solver;
    std::string caseFile;
    std::string players[6];
    std::string suspects[6];
    std::string weapons[6];
    std::string rooms[9];
//ORIGINAL LINE: private String[] cards;
//JAVA TO C++ CONVERTER WARNING: Since the array size is not known in this declaration, Java to C++ Converter has converted this array to a pointer.  You will need to call 'delete[]' where appropriate:
    std::string *cards;

public:
    ClueReasoner()
    {
        InitializeInstanceFields();
        numPlayers = sizeof(players) / sizeof(players[0]);

        // Initialize card info 
        cards = new std::string[sizeof(suspects) / sizeof(suspects[0]) + sizeof(weapons) / sizeof(weapons[0]) + sizeof(rooms) / sizeof(rooms[0])];
        int i = 0;
        for (std::string::const_iterator card = suspects->begin(); card != suspects->end(); ++card)
            cards[i++] = *card;
        for (std::string::const_iterator card = weapons->begin(); card != weapons->end(); ++card)
            cards[i++] = *card;
        for (std::string::const_iterator card = rooms->begin(); card != rooms->end(); ++card)
            cards[i++] = *card;
        numCards = i;

        // Initialize solver 
        solver = new SATSolver();
        addInitialClauses();
    }

private:
    int getPlayerNum(const std::string &player)
    {
        if (player == caseFile)
            return numPlayers;
        for (int i = 0; i < numPlayers; i++)
            if (player == players[i])
                return i;
        std::cout << "Illegal player: " + player << std::endl;
        return -1;
    }

    int getCardNum(const std::string &card)
    {
        for (int i = 0; i < numCards; i++)
            if (card == cards[i])
                return i;
        std::cout << "Illegal card: " + card << std::endl;
        return -1;
    }

    int getPairNum(const std::string &player, const std::string &card)
    {
        return getPairNum(getPlayerNum(player), getCardNum(card));
    }

    int getPairNum(int playerNum, int cardNum)
    {
        return playerNum * numCards + cardNum + 1;
    }

    void InitializeInstanceFields()
    {
        caseFile = "cf";
        std::string temp_players[6] = {"sc", "mu", "wh", "gr", "pe", "pl"};
        for (int element = 0; element < sizeof(temp_players) / sizeof(temp_players[0]); element++)
            players[element] = temp_players[element];
        std::string temp_suspects[6] = {"mu", "pl", "gr", "pe", "sc", "wh"};
        for (int element = 0; element < sizeof(temp_suspects) / sizeof(temp_suspects[0]); element++)
            suspects[element] = temp_suspects[element];
        std::string temp_weapons[6] = {"kn", "ca", "re", "ro", "pi", "wr"};
        for (int element = 0; element < sizeof(temp_weapons) / sizeof(temp_weapons[0]); element++)
            weapons[element] = temp_weapons[element];
        std::string temp_rooms[9] = {"ha", "lo", "di", "ki", "ba", "co", "bi", "li", "st"};
        for (int element = 0; element < sizeof(temp_rooms) / sizeof(temp_rooms[0]); element++)
            rooms[element] = temp_rooms[element];
    }
};
#包括
类聚集者
{
私人:
int numPlayers;
int playerNum;
国际货币基金组织;
SATSolver*解算器;
std::字符串caseFile;
标准:弦乐演奏者[6];
std::字符串可疑[6];
标准::弦武器[6];
标准:弦室[9];
//原始行:私有字符串[]卡;
/java到C++转换器警告:由于在声明中数组大小不知道,java到C++转换器已经将这个数组转换成指针。
std::字符串*卡;
公众:
ClueReasoner()
{
初始化instancefields();
numPlayers=sizeof(players)/sizeof(players[0]);
//初始化卡信息
卡片=新标准::字符串[sizeof(嫌疑犯)/sizeof(嫌疑犯[0])+sizeof(武器)/sizeof(武器[0])+sizeof(房间)/sizeof(房间[0]);
int i=0;
对于(std::string::const_迭代器卡=可疑->开始();卡!=可疑->结束();+卡)
卡片[i++]=*卡片;
对于(std::string::const_迭代器卡=武器->开始();卡!=武器->结束();+卡)
卡片[i++]=*卡片;
对于(std::string::const_iterator card=rooms->begin();card!=rooms->end();++card)
卡片[i++]=*卡片;
numCards=i;
//初始化解算器
解算器=新解算器();
额外费用();
}
私人:
int getPlayerNum(常量标准::字符串和播放器)
{
if(player==caseFile)
返乡职工;
for(int i=0;istd::cout Thank!我提出了另一个问题,在我看来,私有和公共并没有像我所希望的那样出现。我使用了正确的语法将它们设置为私有和公共,但是……我失败了。你能在这个问题上帮我更多忙吗,先生?@Xelza你能添加一些小代码片段来说明失败的原因吗?@Xelza你不能在函数中有<代码>私有< <代码> > >公共>代码>代码>保护/代码>。它只在类或结构中工作。那么,如何在C++中转换它们?@ XelZa。我认为您需要问一个关于您所遇到的特定问题的具体问题。只需说,将某些java翻译成C++是有问题的。