Re: Error: cannot return non-void from void function
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; }
Error: cannot return non-void from void function
auto parseConfig() { auto lines = File(txtlinks, r).byLine; return lines; } Error: cannot return non-void from void function I can't understand the reasons of the error; Can I return auto from function?
Re: Error: cannot return non-void from void function
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
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
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
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
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
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
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
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