www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Error: no property 'opCall' for type 'app1.ReturnContent'

reply "Suliman" <bubnenkoff gmail.com> writes:
import std.stdio;

void main()

{
	ReturnContent();
}


public class ReturnContent
{
	void ReturnContent()
	{
		writeln("hello");
	}
}

Why I am getting this error?
D2
Oct 24 2012
parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On Wednesday, October 24, 2012 12:00:11 Suliman wrote:
 import std.stdio;
 
 void main()
 
 {
 	ReturnContent();
 }
 
 
 public class ReturnContent
 {
 	void ReturnContent()
 	{
 		writeln("hello");
 	}
 }
 
 Why I am getting this error?
 D2
It means exactly what it says. ReturnContent is a class, so when you use ReturnContent(), you're trying to call the function operator on the type ReturnContent. That's not going to work unless you overloaded opCall on ReturnContent and made it static. e.g. public class ReturnContent { static void opCall() { writeln("static opCall"); } } Your ReturnContent function inside of ReturnContent is only ever going to be callable on instances of ReturnContent, not on the type, so you must create an instance of it first. e.g. auto rc = new ReturnContent; rc.ReturnContent(); However, it's incredibly bizarre to name a member function the same name as the type. In D, constructors are named this, and member functions are most frequently named with camelCase - e.g. returnType - whereas types are most frequently named with PascalCase - e.g. ReturnType. So, naming a function the same as the type is odd and confusing. - Jonathan M Davis
Oct 24 2012