"Error: function expected before (), not module *module* of type void

Samir samir at aol.com
Sat Sep 22 01:51:33 UTC 2018


On Monday, 24 March 2008 at 17:41:11 UTC, Steven Schveighoffer 
wrote:
> I know you fixed the problem, but just an FYI, the reason is 
> because when you import rollDice, you bring both rollDice the 
> module and rollDice the function into the global namespace 
> (which confuses the compiler 'cause it doesn't know what symbol 
> you want to use).  This is normally avoided in libraries by 
> having a package tree.  So for example, if you created 
> everything in the subdirectory foo, and had your modules be:
>
> module foo.diceroller;
> import foo.rollDice;
>
> Then the import would import the module foo.rollDice, and the 
> function rollDice, and the compiler would no longer be confused 
> about what you are trying to call.
>
> IMO, this makes it difficult to write multi-file applications 
> that live in one directory.  It would be nice if this was 
> changed...
>
> -Steve

I know this thread is quite old but I still seem to be getting a 
similar error and don't understand how to resolve it. I currently 
have a program isPrime.d that I would like to reuse in other 
programs:

isPrime.d:
bool isPrime(int n) {
     // logic to check if n is prime
}

main.d:
import isPrime;
void main() {
     isPrime(x);
}

Both files are in the same directory. When compiling main.d, I 
get:
Error: function expected before (), not module isPrime of type 
void

I've tried changing the name of the function isPrime in isPrime.d 
to something else (as well as changing the name in the main 
program) but then I get an error similar to:
In function `_Dmain':
main.d:(.text._Dmain[_Dmain]+0x83): undefined reference to 
`_D7isPrime3isPFiZb'
collect2: error: ld returned 1 exit status
Error: linker exited with status 1

Thanks in advance.


More information about the Digitalmars-d-learn mailing list