Blockchain 如何在solidity版本0.5.2中调用另一个contarct内的合同?

Blockchain 如何在solidity版本0.5.2中调用另一个contarct内的合同?,blockchain,ethereum,solidity,smartcontracts,remix,Blockchain,Ethereum,Solidity,Smartcontracts,Remix,我使用的是solidity版本0.5.2 pragma solidity ^0.5.2; contract CampaignFactory{ address[] public deployedCampaigns; function createCampaign(uint minimum) public{ address newCampaign = new Campaign(minimum,msg.sender); //Error //here!!! deployedCa

我使用的是solidity版本0.5.2

pragma solidity ^0.5.2;

contract CampaignFactory{
address[] public deployedCampaigns;

function createCampaign(uint minimum) public{
    address newCampaign  = new Campaign(minimum,msg.sender);  //Error 
//here!!!
    deployedCampaigns.push(newCampaign);
} 

function getDeployedCampaigns() public view returns(address[] memory){
    return deployedCampaigns;
}
}
分配调用活动工厂合同内的活动合同时,我收到错误

TypeError: Type contract Campaign is not implicitly convertible to expected 
type address.        
address newCampaign  = new Campaign(minimum,msg.sender);
我还有另一份合同,名为Campaign,我想在CampaignFactory内部访问它

contract Campaign{
//some variable declarations and some codes here......
我的构造函数如下所示

constructor (uint minimum,address creator) public{
    manager=creator;
    minimumContribution=minimum;

}
你可以直接投下它:

address newCampaign = address(new Campaign(minimum,msg.sender));
或者最好停止使用
地址
,使用更具体的类型
活动

pragma solidity ^0.5.2;

contract CampaignFactory{
    Campaign[] public deployedCampaigns;

    function createCampaign(uint minimum) public {
        Campaign newCampaign = new Campaign(minimum, msg.sender);
        deployedCampaigns.push(newCampaign);
    } 

    function getDeployedCampaigns() public view returns(Campaign[] memory) {
        return deployedCampaigns;
    }
}

要从另一个合同调用现有合同,请在cast中传递合同地址

pragma solidity ^0.5.1;

contract D {
    uint x;
    constructor (uint a) public  {
        x = a;
    }
    function getX() public view returns(uint a)
    {
        return x;
    }
}

contract C {
//DAddress : is the exsiting contract instance address after deployment
    function getValue(address DAddress) public view returns(uint a){
        D d =D(DAddress);
        a=d.getX();
    }
}

成功了!。谢谢@smarkx,我会记住你的建议。