Re: Error: cannot return non-void from void function

2014-11-27 Thread Suliman via Digitalmars-d-learn

Full function look like this:

auto parseConfig()
{
auto config = Ini.Parse(getcwd ~ \\ ~ config.ini);
string txtlinks = getcwd ~ \\ ~ config.getKey(input_links);
if(!exists(txtlinks))
{
writeln(Can't find input file with list of links.);
return;
}
auto lines = File(txtlinks, r).byLine;
return lines;

}


Re: Error: cannot return non-void from void function

2014-11-27 Thread Graham Fawcett via Digitalmars-d-learn

On Thursday, 27 November 2014 at 13:07:59 UTC, Suliman wrote:

Full function look like this:

auto parseConfig()
{
auto config = Ini.Parse(getcwd ~ \\ ~ config.ini);
string txtlinks = getcwd ~ \\ ~ config.getKey(input_links);
if(!exists(txtlinks))
{
writeln(Can't find input file with list of links.);
return;
}
auto lines = File(txtlinks, r).byLine;
return lines;

}


You have two return statements in your function. Each of them 
returns a result of a different type (the first one returns a 
void result). That's not allowed.


Instead of writing Can't find input file and then returning, 
consider throwing an exception. Then you only have one return 
statement, and one return type.


Graham


Re: Error: cannot return non-void from void function

2014-11-27 Thread ketmar via Digitalmars-d-learn
On Thu, 27 Nov 2014 13:07:58 +
Suliman via Digitalmars-d-learn digitalmars-d-learn@puremagic.com
wrote:

 Full function look like this:
 
 auto parseConfig()
 {
   auto config = Ini.Parse(getcwd ~ \\ ~ config.ini);
   string txtlinks = getcwd ~ \\ ~ config.getKey(input_links);
   if(!exists(txtlinks))
   {
   writeln(Can't find input file with list of links.);
   return;
   }
   auto lines = File(txtlinks, r).byLine;
   return lines;
 
 }
ah, that's it! as spec says, D determines function return value from
the first 'return' statement it seen. in your case this is `return;`,
so function return type is determined to be `void`.

if you doing `auto` functions, try to arrange your code so the first
`return` returning the actual value.

besides, your code is wrong anyway, 'cause you can't have function that
returns both nothing and something. your first `return;` should
either return something, or must be changed to throwing some exception.


signature.asc
Description: PGP signature


Re: Error: cannot return non-void from void function

2014-11-27 Thread Suliman via Digitalmars-d-learn


ah, that's it! as spec says, D determines function return value 
from
the first 'return' statement it seen. in your case this is 
`return;`,

so function return type is determined to be `void`.

if you doing `auto` functions, try to arrange your code so the 
first

`return` returning the actual value.

besides, your code is wrong anyway, 'cause you can't have 
function that
returns both nothing and something. your first `return;` 
should
either return something, or must be changed to throwing some 
exception.


How I can terminate program? First return I used to terminate app 
if config file is exists.


Re: Error: cannot return non-void from void function

2014-11-27 Thread ketmar via Digitalmars-d-learn
On Thu, 27 Nov 2014 17:22:35 +
Suliman via Digitalmars-d-learn digitalmars-d-learn@puremagic.com
wrote:

 
  ah, that's it! as spec says, D determines function return value 
  from
  the first 'return' statement it seen. in your case this is 
  `return;`,
  so function return type is determined to be `void`.
 
  if you doing `auto` functions, try to arrange your code so the 
  first
  `return` returning the actual value.
 
  besides, your code is wrong anyway, 'cause you can't have 
  function that
  returns both nothing and something. your first `return;` 
  should
  either return something, or must be changed to throwing some 
  exception.
 
 How I can terminate program? First return I used to terminate app 
 if config file is exists.
throw an exception. uncatched exception will terminate your program.


signature.asc
Description: PGP signature


Re: Error: cannot return non-void from void function

2014-11-27 Thread Daniel Kozak via Digitalmars-d-learn

On Thursday, 27 November 2014 at 17:22:36 UTC, Suliman wrote:


ah, that's it! as spec says, D determines function return 
value from
the first 'return' statement it seen. in your case this is 
`return;`,

so function return type is determined to be `void`.

if you doing `auto` functions, try to arrange your code so the 
first

`return` returning the actual value.

besides, your code is wrong anyway, 'cause you can't have 
function that
returns both nothing and something. your first `return;` 
should
either return something, or must be changed to throwing some 
exception.


How I can terminate program? First return I used to terminate 
app if config file is exists.


You can use this:

auto parseConfig()
{
string txtlinks = buildPath(getcwd,notexist);
if(exists(txtlinks))
{
auto lines = File(txtlinks, r).byLine;
return lines;
}
writeln(Can't find input file with list of links.);
return typeof(return)();
}

it works somehow, but it is not good way how to do it.

Other way is use exit

if(!exists(txtlinks))
{
import core.runtime;
import std.c.process;
writeln(Can't find input file with list of links.);
Runtime.terminate();
exit(1);
}
But best way is use throw exception

if(!exists(txtlinks))
{
	throw new Exception(Can't find input file with list of 
links.);

}
and catch it somewhere from calling side


Re: Error: cannot return non-void from void function

2014-11-27 Thread ketmar via Digitalmars-d-learn
On Thu, 27 Nov 2014 21:14:57 +
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:

   import core.runtime;
   import std.c.process;
   writeln(Can't find input file with list of links.);
   Runtime.terminate();
   exit(1);
please-please-please don't teach people that! using such features
requiring deep understanding of how D runtime works, and how it
interacts with C runtime, with GC, with stack objects and so on.

it's better to now show people bad samples instead of telling them
don't do what i just wrote. ;-)


signature.asc
Description: PGP signature


Re: Error: cannot return non-void from void function

2014-11-27 Thread Daniel Kozak via Digitalmars-d-learn
Dne Thu, 27 Nov 2014 22:21:52 +0100 ketmar via Digitalmars-d-learn  
digitalmars-d-learn@puremagic.com napsal(a):



On Thu, 27 Nov 2014 21:14:57 +
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:


import core.runtime;
import std.c.process;
writeln(Can't find input file with list of links.);
Runtime.terminate();
exit(1);

please-please-please don't teach people that! using such features
requiring deep understanding of how D runtime works, and how it
interacts with C runtime, with GC, with stack objects and so on.

it's better to now show people bad samples instead of telling them
don't do what i just wrote. ;-)


I know, I just can't help myself :).


Re: Error: cannot return non-void from void function

2014-11-27 Thread ketmar via Digitalmars-d-learn
On Thu, 27 Nov 2014 22:25:10 +0100
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:

 Dne Thu, 27 Nov 2014 22:21:52 +0100 ketmar via Digitalmars-d-learn  
 digitalmars-d-learn@puremagic.com napsal(a):
 
  On Thu, 27 Nov 2014 21:14:57 +
  Daniel Kozak via Digitalmars-d-learn
  digitalmars-d-learn@puremagic.com wrote:
 
 import core.runtime;
 import std.c.process;
 writeln(Can't find input file with list of links.);
 Runtime.terminate();
 exit(1);
  please-please-please don't teach people that! using such features
  requiring deep understanding of how D runtime works, and how it
  interacts with C runtime, with GC, with stack objects and so on.
 
  it's better to now show people bad samples instead of telling them
  don't do what i just wrote. ;-)
 
 I know, I just can't help myself :).
me too sometimes. taking into accout that don't try this at home
warning is never working makes it even funnier. ;-)


signature.asc
Description: PGP signature