Thirsty Panther Posted March 12, 2020 Share Posted March 12, 2020 I'm working my way thru the C++ tutorials and I've gotten to the if statement part. #include "Leadwerks.h"; int main(int argc, const char *argv[]) { if (2>1) { Print("Two is greater than one!"); } } Then the explanation of the code is given as. "The above code tests to see if two is greater than one (it is!) and then goes on to execute the code inside the statement. The statement is terminated with the "end" keyword. So we know the above code would print out the word "true" when run." Isn't this wrong? The statement end with the } doesn't it? and not the "end" keyword. 2>1 is true but would print "Two is greater than one!" as we have told it to do if 2>1. 1 Quote Link to comment Share on other sites More sharing options...
gamecreator Posted March 12, 2020 Share Posted March 12, 2020 Yes, you're right. I don't believe C/C++ has an end statement anyway. Probably some copy and pasting error on Josh's part. 1 Quote Link to comment Share on other sites More sharing options...
reepblue Posted March 12, 2020 Share Posted March 12, 2020 Why is there a ; after include? Remove that and it should work. Also, you need to define the Leadwerks namespace calling "using namespace" above your function. 1 Quote Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
gamecreator Posted March 12, 2020 Share Posted March 12, 2020 I might be being pedantic here so bear with me: Good catch on the semicolon but those won't affect your program. Toss some extra semicolons in your program between functions and it'll still compile. Still, while it will run just fine, agreed that it's unnecessary. As for the namespace thing, that's only if you include Leadwerks commands, right? For these simple C++ examples, I don't believe it's necessary. (He does talk about namespaces in the first C++ tutorial page.) Finally, it should be printf, not Print. Like, everywhere. ? 1 Quote Link to comment Share on other sites More sharing options...
reepblue Posted March 12, 2020 Share Posted March 12, 2020 Yeah. There is a Leadwerks::Print(), but there is no such thing as Print() unless you make your own function. 2 Quote Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 12, 2020 Author Share Posted March 12, 2020 Thanks gentlemen for the clarification. I thought it was a cut and paste error. There is a couple of "s written as quote in the Loop section of the tutorial as well. There is also a mention of Lua in the start of the Loop tutorial, not sure if thats a cut and paste issue. I'm going OK just started arrays, vectors and containers. Its a bit of a step up from Lua but I'm feeling a little more comfortable with C++ than I thought I would. Quote Link to comment Share on other sites More sharing options...
gamecreator Posted March 12, 2020 Share Posted March 12, 2020 2 hours ago, reepblue said: Yeah. There is a Leadwerks::Print(), but there is no such thing as Print() unless you make your own function. Ah, I didn't know that. Thanks. 1 hour ago, Thirsty Panther said: I'm going OK just started arrays, vectors and containers. Its a bit of a step up from Lua but I'm feeling a little more comfortable with C++ than I thought I would. Good job. Seems you're picking it up fast. 1 Quote Link to comment Share on other sites More sharing options...
Josh Posted March 13, 2020 Share Posted March 13, 2020 The tutorial itself was a test. You have passed. 1 Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 13, 2020 Author Share Posted March 13, 2020 Thank You Sensei. Quote Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 13, 2020 Author Share Posted March 13, 2020 Sensei I believe I have found another test. In the Vector lesson should the code for a vector of integer values be std::vector <int> myvector; and not std::vector myvector; And the code for a vector of strings should be std::vector <string> myvector; And in Lists should we also declare which data type we are going to use. std::list <int> mylist; or std::list <string> mylist; As a general rule what are the strengths and weaknesses of arrays, vectors, maps and lists. I assume arrays are less memory hungry as their size doesn't change but are less flexible. Vectors look like they could be difficult to keep track of. Maps look similar to how tables work in Lua. 1 Quote Link to comment Share on other sites More sharing options...
Ma-Shell Posted March 13, 2020 Share Posted March 13, 2020 9 hours ago, Thirsty Panther said: As a general rule what are the strengths and weaknesses of arrays, vectors, maps and lists. Arrays use a single continuous memory block. If you want to enlarge your array you need to copy all data to the new location. However, when you want to randomly index the array, this can be done in constant time, so accessing x[5] is just as fast as accessing the first element or the last one. Vectors are basically a sort of managed arrays. They take care for reserving more space than you actually requested, so they can dynamically be increased and decreased in a limited manner without a performance hit. Lists are usually linked one element to the next. This means, for accessing the 5th element, you need to call list->first->next->next->next->next. It becomes evident that random access on any member of the list is quite bad. However, if you only iterate over the entire list, handling each element in there, this can be done quite efficient. Of course, lists can be grown and shrinked without problems, since they do not have to be any continous blocks of memory. However, since you need to keep track of all the additional bookkeeping-elements, like references to the first, last, next and previous elements, you need more storage than in an array. Performance wise, the fact that they are not in a continuous block of memory also impacts the caching behaviour (but you probably won't notice unless you are using them quite intensively) Maps are something quite different. They usually work by building a hash value of the corresponding keys and finding the corresponding list of elements that have the same hash-value in an array of buckets. They are usually well suited, if you have a key-value-pair, which you need to track. Both, insert- and lookup- operations require building of a hash-value, as well as an array access and iterating over a (usually very small) list of items in the corresponding bucket, so they have "rather constant" access times. 1 Quote Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 13, 2020 Author Share Posted March 13, 2020 Thanks Ma-Shell, useful information there. I'm going to work thru some examples this weekend to try and get my head around all this. Had a quick look at classes and inheritance last night. I will need to go thru this again as well. Thanks for the help. Quote Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 14, 2020 Author Share Posted March 14, 2020 Not sure on this one. In the Windows create function example, in the while loop we update the time with Leadwerks::Time::Update(); Could we just use Time::Update(); as we have already specified "Leadwerks" in the using namespace call. Quote Link to comment Share on other sites More sharing options...
gamecreator Posted March 14, 2020 Share Posted March 14, 2020 Yes, you're right. It should get rid of the need to use Leadwerks:: for every function. I believe it would give you an error if you didn't have the using there though. 1 Quote Link to comment Share on other sites More sharing options...
Josh Posted March 14, 2020 Share Posted March 14, 2020 Sometimes the namespace is included for compatibility with Linux/GCC. 1 Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 14, 2020 Author Share Posted March 14, 2020 3 minutes ago, Josh said: Sometimes the namespace is included for compatibility with Linux/GCC. So for my own projects it is fine to leave it out? Quote Link to comment Share on other sites More sharing options...
Josh Posted March 14, 2020 Share Posted March 14, 2020 If you aren't doing a Linux build. 1 Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Thirsty Panther Posted March 14, 2020 Author Share Posted March 14, 2020 No. Just windows. Quote Link to comment Share on other sites More sharing options...
reepblue Posted March 14, 2020 Share Posted March 14, 2020 The only functions you'll need the Leadwerks namespace in front of the call is Time and Window. Make a precompiled/shared header and define the following. #ifndef STDAFX_H #define STDAFX_H #if defined( _WIN32 ) #pragma once #endif #include "Leadwerks.h" #ifdef GetFileType #undef GetFileType #endif using namespace Leadwerks; #define Timing Leadwerks::Time #define EngineWindow Leadwerks::Window #endif // STDAFX_H Then whenever you want to use the Time or Window function you'll just call something like this: #include "pch.h" int main() { auto w = EngineWindow::Create(); while (true) { Timing::Update(); } } This ensures that your code will be cross compatible and you don't have to ever worry about using the namespace. 1 Quote Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.