在类型(合约游戏)中进行依赖于参数的查找后,找不到成员"team1Score"或不可见 - 坚固性



我正在上课,遇到了一个问题。

我正在尝试创建一个函数,从变量teamNumber中的团队角度显示团队得分的差异。

我的问题是,当尝试导入变量"team1Score"或";team2Score"从另一个合同游戏。我得到错误-Member "team1Score">

这是游戏。索尔合同:

pragma solidity ^0.8.4;
contract Game {
int public team1Score;
int public team2Score;
enum Teams { Team1, Team2 }
function addScore(Teams teamNumber) external {
if (teamNumber == Teams.Team1) {
team1Score +=1;
} else if (teamNumber == Teams.Team2) {
team2Score +=1;
}
}
}

下面是Bet的代码。它引用Game.sol。问题出在函数"getScoreDifference">

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./Game.sol";
contract Bet {
address public game;

constructor (address gameContract) {
game = gameContract;
}

// calculates the payout of a bet based on the score difference between the two teams
function calculatePayout(uint amount, int scoreDifference) private pure returns(uint) {
uint abs = uint(scoreDifference > 0 ? scoreDifference : scoreDifference * -1);  
uint odds = 2 ** abs;
if(scoreDifference < 0) {
return amount + amount / odds;
}
return amount + amount * odds;
}
function getScoreDifference (Game.Teams x) public view returns (int256){
if (x == Game.Teams.Team1) {
return Game.team1Score - Game.team2Score;
} else if (x == Game.Teams.Team2) {
return Game.team2Score - Game.team1Score;
}
}
}

this

constructor (address gameContract) {
game = gameContract;
}

应该

constructor (address gameContract) {
game = Game(gameContract);
}

function getScoreDifference (Game.Teams x) public view returns (int256){
if (x == Game.Teams.Team1) {
return Game.team1Score - Game.team2Score;
} else if (x == Game.Teams.Team2) {
return Game.team2Score - Game.team1Score;
}
}

应该

function getScoreDifference (Game.Teams x) public view returns (int256){
if (x == Game.Teams.Team1) {
return game.team1Score - game.team2Score;
} else if (x == Game.Teams.Team2) {
return game.team2Score - game.team1Score;
}
}
function getScoreDifference (Game.Teams x) public view returns (int256) {
if (x == Game.Teams.Team1) {
return game.team1Score - game.team2Score;
} else if (x == Game.Teams.Team2) {
return game.team2Score - game.team1Score;
}
}

^this仍然会失败,因为导入契约的方法只能作为函数使用,即;contract.variableName()

相反,它应该是这样通过所有的测试:

function getScoreDifference (Game.Teams x) public view returns (int256 score) {
if (x == Game.Teams.Team1) {
return score = game.team1Score() - game.team2Score();
} else if (x == Game.Teams.Team2) {
return score = game.team2Score() - game.team1Score();
}
}

相关内容