'Explicit type conversion not allowed from "int_const" to "contract"

I am trying to deploy a contract from another contract following the example from here

At some point the example states:

Instanciating a new Counter for someone will look like this:

   function createCounter() public {
        require (_counters[msg.sender] == Counter(0));
        _counters[msg.sender] = new Counter(msg.sender);
    }

We first check if the person already owns a counter. If he does not own a counter we instantiate a new counter by passing his address to the Counter constructor and assign the newly created instance to the mapping.

However, when I try that in my factory contract:

pragma solidity >=0.7.0 <0.9.0;

contract Factory {
    mapping(address => Campaign) _campaigns;

    function createCampaign(uint minContrib) public {
        require(_campaigns[msg.sender] == Campaign(0));
        _campaigns[msg.sender] = new Campaign(minContrib, msg.sender);
    }
 }


...


contract Campaign {
 
    /* Irrelevant code skipped ... */

    constructor (uint minContrib, address creator) {
        manager = creator;
        minContribution = minContrib;
    }

compilation error pops:

from solidity: TypeError: Explicit type conversion not allowed from "int_const 0" to "contract Campaign". --> contracts/3_Ballot.sol:10:43: | 10 | require(_campaigns[msg.sender] == Campaign(0)); | ^^^^^^^^^^^

What comparison is being made here exactly?

require (_counters[msg.sender] == Counter(0));

What is Counter(0)? An instance of contract (like new Counter(0)) or a type conversion of parameter 'int_const' to 'contract'?



Solution 1:[1]

Found this this answer which made things a bit clearer.

Apparently this is trying to compare the Contract deployed at address 0 with thatever is stored at _counters[msg.sender] (which I believe should be the address of a deployed contract).

require (_counters[msg.sender] == Counter(0));

With that in mind, I get the error is saying "we're expecting a Counter or address of contract and you give us an int".

I fixed it with Counter(address(0)).

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Checkerpy