No se puede leer la propiedad '2' de null

pragma solidity ^0.4.23;

import'./ID.sol';
import'./Whitelisted.sol';

contract IDFactory is Ownable {

    Whitelisted whitelist;

    event IDCreated(uint id, address idContractAddress);

    mapping (uint => address) public ids;

    modifier idExists(uint id) {
      require(ids[id]);
      _;
     }
      constructor() public {
        owner = msg.sender;
        whitelist = new Whitelisted(owner);
        whitelist.addToWhitelist(owner);
    }
}

Hola, estoy tratando de compilar un contrato de solidez usando trufa. El contrato se llama IDFactory.sol. Cuando ejecuto la compilación de trufas, aparece este error:

MacBook-Pro-de-Alicia-2:a alicialombarte$ truffle compile
TypeError: Error parsing /Users/alicialombarte/notary-contract/a/contracts/IDFactory.sol: Cannot read property '2' of null
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:171:1
    at Array.map (<anonymous>)
    at Object.parseImports (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:167:6)
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/profiler.js:302:1
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:79:1
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/onlyOnce.js:12:1
    at next (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/whilst.js:68:1)
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:64:1
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/fs.js:85:1
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/once.js:12:1

No tengo ningún '2' en mi contrato.

¡Gracias!

Aquí están los otros 2 contratos:

pragma solidity ^0.4.23;

import'./Whitelisted.sol';

contract ID{

    uint id;
    Whitelisted whitelist;
    mapping (string => MessageData) public messages;

    event MessageSaved(string messageHash);

    constructor(uint _id, address _whitelist) public {
        owner = msg.sender;
        id = _id;
        whitelist = Whitelisted(_whitelist);
    }

    struct MessageData {
        string messageSender;
        uint64 timestamp;
    }
}

pragma solidity ^0.4.23;

import 'Ownable.sol';

contract Whitelisted is Ownable {

    constructor(_owner) public {
        owner = _owner;
    }

    mapping(address => bool) internal whitelistedAddresses;

    function isWhitelisted(address addr) internal view returns (bool) {
        return whitelistedAddresses[addr];
    }

    function addToWhitelist(address addr) public onlyOwner {
        require(!isWhitelisted(addr));
        whitelistedAddresses[addr] = true;
    }

    function removeFromWhitelist(address addr) public onlyOwner {
        require(isWhitelisted(addr));
        whitelistedAddresses[addr] = false;
    }

    modifier onlyWhitelisted {
        require(isWhitelisted(msg.sender));
        _;
    }
}
¿Puede proporcionar el código para los contratos Whilisted e ID?
@Jaime agregué los contratos :)
Agregué una respuesta, déjame saber cómo va.

Respuestas (2)

Pongo todos los contratos en remix y se muestran algunos errores:

En Whitelistedcontrato:

constructor(_owner) public {
        owner = _owner;
    }

Debiera ser:

constructor(address _owner) public {
        owner = _owner;
    }

El contrato de identificación debe ser Ownablepara usar la ownervariable o puede ser Whitelisted.

Además, tienes un mapeo

mapping (string => MessageData)

Esto usa una cadena como clave, y esto aún no está implementado en Solidity. podría definir esto como bytes32 si sus cadenas encajan. No puede usar variables de matriz dinámica como clave.

Espero esta ayuda.

Este error no es un problema con su código Solidity.

Este tipo de error lo da React.js. Parece que está modelando algún objeto e intentando acceder a su segunda propiedad. Entonces, probablemente la adquisición del objeto no esté bien hecha y el var/object sea nulo.

Por eso, cuando intenta acceder a sus propiedades, no puede hacerlo, porque no puede acceder a una propiedad nula, simplemente no tiene ninguna propiedad.

Vuelva a verificar su código React e intente encontrar el objeto nulo al que está accediendo a su segunda propiedad. Luego, intente obtenerlo de la cadena de bloques correctamente para no obtener un valor nulo en lugar de los datos correctos.

Espero eso ayude.

Hola, gracias por la ayuda, pero no estoy usando react.js, solo estoy tratando de compilar los contratos, ¿crees que podría ser debido a la conexión con mi nodo, tal vez faltan algunos de los parámetros, como las cuentas? Mi versión de trufa es Truffle v4.1.7 (núcleo: 4.1.7) y estoy usando Ganache para mi nodo
¿Intentaste compilar el contrato en Remix? Pruébalo y mira si obtienes el mismo error.
Con Remix funciona, intentaré reinstalar Truffle. ¡Gracias!
El error solo aparece cuando importo el contrato en la lista blanca (Whitelisted.sol), en Remix no lo importé, importé otras cosas como obras propias.
La corrección publicada por @Jaime creo que hará que funcione sin arrojar errores.