• 0

c++ Help


Question

20 answers to this question

Recommended Posts

  • 0

From what I understand, you want to add a  date of birth into the Person class.

 

Step 1

To begin, you'll need to add a date of birth field into the person class. You'll need to do this in two parts.

 

First, you need to include the OCCCDate class header file inside your Person.h header file...

 

Person.h
---------------------------------------------------------

//Person.h

#ifndef PERSON_H
#define PERSON_H
#include<string>

// Add the OCCCDate.h header file...
#include "OCCCDate.h"

...

Once you've added the header file, you can create a private class member inside your person class like you've described in your original post.

 

Person.h
---------------------------------------------------------

...

class Person{
    private:
        string firstname;
        string lastname;

        // Add an OCCCDate class here as a member, just like you did for the strings above.

    public:

...    
Step 2:

It's unlikely that you'll want a person to have the current system date as their date of birth, so you'll need to add a parameter to the Person constructor to pass a date of birth. like this:

Person.h
---------------------------------------------------------

...

class Person{

    private:
        ...

    public:
        Person(string firstName, string lastName, OCCCDate dateOfBirth);
//                                                ^--------,---------^
//                                                         New parameter in the constructor.

...    
Don't forget you'll need to copy the date of birth parameter in the constructor in your Person.cpp file too! Looking at your .cpp file, you're almost there already :)).

Once you've done that, you can add a method to the Person class to retrieve the date of birth (just like Person::getFirstName() and Person::getLastName()), and you're good to go!

Hope this helps :)

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595929151
Share on other sites

  • 0

I assume you're seeing an error talking about "redefinition of class OCCCDate"? That's because of the following lines in OCCCDate.h...

 

//file OcccDate.h

#ifndef OCCCDATE_H
#define OCCCDDATE_H
See the spelling mistake in the #define line (hint: two 'D's in DDATE)? You'll need to fix that like this...

 

//file OcccDate.h

#ifndef OCCCDATE_H
#define OCCCDATE_H
Once you fix that, it should work. Because of the spelling mistake, the #ifndef block was always TRUE (because OCCCDATE_H was never defined), and the compiler tried to define the class again, which is bad ;).
Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595930801
Share on other sites

  • 0

Or you could just use #pragma once rather than #ifndef #define #endif. All major compilers (MSVC, GCC, Clang, Intel, etc.) support it and it reduces the potential for bugs. Like the one you just had.

While I agree with you in practice, if it's an assignment it may be that the tutor is sticking strictly to the standard, and using #pragma vs a standard-compliant alternative may lose the student points.

WOW just that small mistake and it took me 3 days. jesus. programming is so hard.

Indeed it is, but its also incredibly gratifying if you enjoy it. Glad your issue is sorted. :)

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595931131
Share on other sites

  • 0

WOW just that small mistake and it took me 3 days. jesus. programming is so hard.

No, C++ is just ****. No decent programming language uses header files and silly macro tricks just to get programs to compile. Don't let your opinion of programming be tainted by the arcane and irrelevant rules of C++, even though it happens that this is what your teacher misleadingly thought would be a good idea to show you first. If your teacher thinks C++ is good just ask him "why are there header files in C++?" and watch him be embarassed. I fondly remember being unable to receive an intelligent answer to this question in my first programming class.

 

It ****es me off to think many people must quit programming simply because they're being shown the most bizarre and capricious language in existence first, and assume that all programming must be like that. It's not.

 

Arm yourself with courage and a good C++ book (I used The C++ Primer Plus by Stephen Prata), and when you're through with this course, take a look at such beautiful languages as Python, C#, F#, Scala, Rust, etc. I guarantee your outlook on programming will change for the better and dramatically so.

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595931753
Share on other sites

  • 0

No, C++ is just ****. No decent programming language uses header files and silly macro tricks just to get programs to compile. Don't let your opinion of programming be tainted by the arcane and irrelevant rules of C++, even though it happens that this is what your teacher misleadingly thought would be a good idea to show you first. If your teacher thinks C++ is good just ask him "why are there header files in C++?" and watch him be embarassed. I fondly remember being unable to receive an intelligent answer to this question in my first programming class.

 

It ****es me off to think many people must quit programming simply because they're being shown the most bizarre and capricious language in existence first, and assume that all programming must be like that. It's not.

 

 

That said, he didn't exactly help himself with that function name. VERY easy to mistype that, so I'm not at all surprised he didn't spot it...

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595931945
Share on other sites

  • 0

That said, he didn't exactly help himself with that function name. VERY easy to mistype that, so I'm not at all surprised he didn't spot it...

At least when you mistype something in most programming languages, you tend to get something from the compiler like "hey what's that you typed in file (Z) at line (X) column ( Y), I have no idea what that is." In C++ you tend to get the equivalent of "AAAAAAaaaaarglgl.... guh." Much of the difficulty consists of learning how to map the gibberish to actual errors.

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595932521
Share on other sites

  • 0

At least when you mistype something in most programming languages, you tend to get something from the compiler like "hey what's that you typed in file (Z) at line (X) column ( Y), I have no idea what that is." In C++ you tend to get the equivalent of "AAAAAAaaaaarglgl.... guh." Much of the difficulty consists of learning how to map the gibberish to actual errors.

 

Pretty much why I walked away from C/C++ 2 decades ago. :p  Sure it's handy, but it's a pain in the backside, too!

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595932537
Share on other sites

  • 0

At least when you mistype something in most programming languages, you tend to get something from the compiler like "hey what's that you typed in file (Z) at line (X) column ( Y), I have no idea what that is." In C++ you tend to get the equivalent of "AAAAAAaaaaarglgl.... guh." Much of the difficulty consists of learning how to map the gibberish to actual errors.

 

That is why I use Clang for my C and C++ work when possible: its error messages are so much more sane than GCC. In my opinion one of the biggest advantages of Visual Studio's C++ compiler over GCC is its error messages. That said, I think that Clang beats them both by a long shot with exceptionally helpful diagnostic messages. I was going to try to demonstrate Clang's superiority in this regard using the author's code, but it didn't actually make that much of a difference. For the record, the results are as follows:

$ make CXX=g++
g++ -c -std=c++11 -w -O3   Person.cpp -o Person.o
g++ -c -std=c++11 -w -O3   OCCCDate.cpp -o OCCCDate.o
g++ -c -std=c++11 -w -O3   TestOCCCDate.cpp -o TestOCCCDate.o
In file included from Person.h:7:0,
                 from TestOCCCDate.cpp:4:
OCCCDate.h:8:7: error: redefinition of ?class OCCCDate?
In file included from TestOCCCDate.cpp:3:0:
OCCCDate.h:8:7: error: previous definition of ?class OCCCDate?
make: *** [TestOCCCDate.o] Error 1

$ make CXX=clang++
clang++ -c -std=c++11 -w -O3   Person.cpp -o Person.o
clang++ -c -std=c++11 -w -O3   OCCCDate.cpp -o OCCCDate.o
clang++ -c -std=c++11 -w -O3   TestOCCCDate.cpp -o TestOCCCDate.o
In file included from TestOCCCDate.cpp:4:
In file included from ./Person.h:7:
./OCCCDate.h:8:7: error: redefinition of 'OCCCDate'
class OCCCDate{
      ^
./OCCCDate.h:8:7: note: previous definition is here
class OCCCDate{
      ^
In file included from TestOCCCDate.cpp:4:
In file included from ./Person.h:7:
./OCCCDate.h:15:12: error: expected member name or ';' after declaration specifiers
                OCCCDate();//default constructor, uses current system date and time
                ~~~~~~~~ ^
./OCCCDate.h:16:12: error: expected member name or ';' after declaration specifiers
                OCCCDate(int day, int month, int year);//as define above
                ~~~~~~~~ ^
./OCCCDate.h:16:12: error: expected ')'
./OCCCDate.h:16:11: note: to match this '('
                OCCCDate(int day, int month, int year);//as define above
                        ^
4 errors generated.
make: *** [TestOCCCDate.o] Error 1

$ g++ --version
g++ (Debian 4.7.2-5) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ clang++ --version
Debian clang version 3.0-6.2 (tags/RELEASE_30/final) (based on LLVM 3.0)
Target: x86_64-pc-linux-gnu
Thread model: posix

I can understand why Majesticmerc was able to spot the error whereas nether Clang nor GCC could catch it automatically. Therefore I have to agree with you to some extent. While some compilers do a much better job at printing helpful diagnostic messages than others, it is generally much more difficult to pinpoint errors in C++ than in newer languages like Python. I can generally interpret error messages and pinpoint the mistake in my C++ source code pretty quickly, but I think most of that comes down to experience. I remember Googling basically every error message when I started learning C++ hoping to find the resolution posted somewhere on the Internet. So while I would like to disagree with your assessment, I don't think I realistically can. Therefore I would merely like to point out that Clang prints much better diagnostic messages than other compilers - in most cases.

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595933651
Share on other sites

  • 0

No, C++ is just ****. No decent programming language uses header files and silly macro tricks just to get programs to compile. Don't let your opinion of programming be tainted by the arcane and irrelevant rules of C++, even though it happens that this is what your teacher misleadingly thought would be a good idea to show you first. If your teacher thinks C++ is good just ask him "why are there header files in C++?" and watch him be embarassed. I fondly remember being unable to receive an intelligent answer to this question in my first programming class.

 

It ****es me off to think many people must quit programming simply because they're being shown the most bizarre and capricious language in existence first, and assume that all programming must be like that. It's not.

 

Arm yourself with courage and a good C++ book (I used The C++ Primer Plus by Stephen Prata), and when you're through with this course, take a look at such beautiful languages as Python, C#, F#, Scala, Rust, etc. I guarantee your outlook on programming will change for the better and dramatically so.

 

Seems a bit one sided :).

 

1. If you don't want "silly macro tricks" aka include guards then just never include the header more than once, or use #pragma once ;)

2. Header files are used to define the interface/contract. If you have a header which contains int get_magic_for_this_machine(); then you  call that function, it does some magic, you don't need to know about the 9000 other internal functions and classes it may have/use in its cpp file. Any code in a header file is inlined too. Also its possible to write something that only uses headers... but you'll have to endure huge build times.

3. For his problem there is no way the compiler could help him...

 

#ifdef A

#define B // Was this supposed to be A? or is B correct? What about the stuff below? It could mean anything so this could never be statically checked at build time

#define C

#define D

#endif

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595941813
Share on other sites

  • 0
1. If you don't want "silly macro tricks" aka include guards then just never include the header more than once, or use #pragma once

 

Include guards are still the only standard way, and not including the header more than once in any compilation unit is a very difficult problem to solve in general.

 

2. Header files are used to define the interface/contract.

Not true, they also must include private class members, inline and template function definitions, among other implementation details. The way to define interfaces in object-oriented languages is to use actual interfaces.

 

Header files in C++ are just a legacy of the C compilation model; it's not coincidence that no other language makes use of them.

 

3. For his problem there is no way the compiler could help him...

I agree; the reliance of C and C++ on pre-processor tricks are but one of several issues that make the compiler and tooling very difficult to make user-friendly. The compiler can't report anything meaningful about macros because it doesn't know anything of macros. Well-designed languages take the feasability of tooling into consideration, which apparently wasn't on Stroustrup's mind back then.

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595942153
Share on other sites

  • 0

Include guards are still the only standard way, and not including the header more than once in any compilation unit is a very difficult problem to solve in general.

 

Not true, they also must include private class members, inline and template function definitions, among other implementation details. The way to define interfaces in object-oriented languages is to use actual interfaces.

 

Header files in C++ are just a legacy of the C compilation model; it's not coincidence that no other language makes use of them.

 

I agree; the reliance of C and C++ on pre-processor tricks are but one of several issues that make the compiler and tooling very difficult to make user-friendly. The compiler can't report anything meaningful about macros because it doesn't know anything of macros. Well-designed languages take the feasability of tooling into consideration, which apparently wasn't on Stroustrup's mind back then.

 

For interfaces yes you could use something like

 

class IMyInterface 

{

public:

 virtual ~IMyInterface() { }

 virtual void the_magic() = 0;

};

But if you required data members you wished to be hidden then you can use the PIMPL idiom, but either way someone seeing some basic types or forward declared internal classes in the private section isn't too bad.

Link to comment
https://www.neowin.net/forum/topic/1175399-c-help/#findComment-595947709
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Weekend PC Game Deals: Anno 117, Final Fantasy VII, Rematch, and more by Pulasthi Ariyasinghe Weekend PC Game Deals is where the hottest gaming deals from all over the internet are gathered into one place every week for your consumption. So kick back, relax, and hold on to your wallets. The Epic Games Store's mystery giveaways may have ended, but its regular freebies didn't miss a step this week. The double drop was for copies of Warhammer 40K Speed Freeks and The Ouroboros King. Speed Freeks lands for multiplayer racing fans, but with plenty of competitive shooting elements too. You will be piloting Ork buggies, tanks, and aircraft modeled after the popular tabletop miniatures while trying to complete objectives and pass finish lines. Next, Ouroboros King is a crossover between chess and tactical roguelikes, offering the chance to create your own army with special rules to beat incoming foes on the board. The double giveaway on the Epic Games Store will be available until June 11, and replacing it will be Citizen Sleeper and ROBOBEAT. The Humble Store brought a new charity bundle to check out this week too. Landing with the name The Complete Inkle Library, this is a large collection of interactive narrative puzzle games from the publisher Inkle. This begins with Heaven's Vault, four parts from the Sorcery series, 80 Days, Overboard, and Pendragon: Narrative Tactics within the starting tier for $9. Hopping up a step to the $12 tier gets you TR-49, Expelled, and A Highland Song for paying at least $12. If you go for the $20 tier, you get four e-books from the Heaven's Vault series. The bundle has almost three weeks on its counter before it goes away. Big Deals There is a larger than normal amount of weekend specials happening this time, including multiple publisher deals, franchise discounts, and indie gems to grab. With those and more, here's our hand-picked big deals list for the weekend: Anno 117: Pax Romana – $44.99 on Steam Clair Obscur: Expedition 33 – $39.99 on Steam Timberborn – $27.99 on Steam EARTH DEFENSE FORCE 6 – $26.39 on Steam Rust – $19.99 on Steam FINAL FANTASY VII REBIRTH – $19.99 on Steam Street Fighter 6 – $19.99 on Steam Returnal – $19.79 on Steam Shape of Dreams – $17.49 on Steam Far Cry 6 – $14.99 on Steam Assassin's Creed Valhalla – $14.99 on Steam Quarantine Zone: The Last Check – $14.99 on Steam REMATCH – $14.99 on Steam EA SPORTS FC 26 – $13.99 on Steam FINAL FANTASY VII REMAKE INTERGRADE – $13.99 on Steam Magicraft – $12.79 on Steam Cult of the Lamb – $12.49 on Steam Dying Light 2: Reloaded Edition – $11.99 on Steam Cuphead – $11.99 on Steam Assassin's Creed Odyssey – $11.99 on Steam Hunt: Showdown 1896 – $11.99 on Steam Sektori – $11.99 on Steam Just Shapes & Beats – $11.99 on Steam Gunfire Reborn – $10.99 on Steam 33 Immortals – $9.99 on Epic Store Baby Steps – $9.99 on Steam Sifu – $9.99 on Steam Hearts of Iron IV – $9.99 on Steam DREDGE – $9.99 on Steam DAVE THE DIVER – $9.99 on Steam Pacific Drive – $9.89 on Steam Mycopunk – $9.74 on Steam Sons Of The Forest – $8.99 on Steam Jotunnslayer: Hordes of Hel – $8.99 on Steam Nuclear Throne – $8.99 on Steam Mechabellum – $8.99 on Steam Deep Rock Galactic: Survivor – $8.44 on Steam TerraTech Legion – $7.99 on Steam Inscryption – $7.99 on Steam Assassin's Creed Unity – $7.49 on Steam Minishoot' Adventures – $7.49 on Steam The Stanley Parable – $7.49 on Steam Oxygen Not Included – $7.49 on Steam Megabonk – $6.99 on Steam Look Outside – $5.99 on Steam Vampire Hunters – $5.24 on Steam MOTHERGUNSHIP – $4.99 on Steam My Friend Pedro – $3.99 on Steam The Messenger – $3.99 on Steam Vampire Survivors – $3.74 on Steam Brotato – $2.99 on Steam Enter the Gungeon – $2.99 on Steam Loop Hero – $2.99 on Steam GRIS – $2.99 on Steam Exit the Gungeon – $2.49 on Steam Hitman: Absolution – $1.99 on Steam CARRION – $1.99 on Steam Don't Starve Together – $1.49 on Steam Golf With Your Friends – $1.49 on Steam Hotline Miami – $0.99 on Steam The Ouroboros King – $0 on Epic Store Warhammer 40K Speed Freeks – $0 on Epic Store DRM-free Specials Hopping over to the DRM-free deals, the GOG store has plenty of discounts running this weekend too. Here are some highlights: Fallout 4: Game of the Year Edition - $15.99 on GOG Fallout: New Vegas Ultimate Edition - $9.99 on GOG Disco Elysium - The Final Cut - $9.99 on GOG Crysis - $9.99 on GOG Tyranny - Standard Edition - $7.49 on GOG Frostpunk: Game of the Year Edition - $7.35 on GOG Banished - $6.79 on GOG Fallout 3: Game of the Year Edition - $6.59 on GOG The Forgotten City - $6.25 on GOG The Age of Decadence - $5.99 on GOG SimCity 3000 Unlimited - $4.99 on GOG Assassin's Creed: Director's Cut - $4.99 on GOG SimCity 4 Deluxe Edition - $3.99 on GOG Vampyr - $3.99 on GOG Torchlight II - $3.99 on GOG Deus Ex GOTY Edition - $3.49 on GOG Primordia - $3.09 on GOG Theme Hospital - $2.99 on GOG SimCity 2000 Special Edition - $2.99 on GOG Total Annihilation: Kingdoms + Iron Plague - $2.99 on GOG Deus Ex: Human Revolution - Director’s Cut - $2.99 on GOG Master of Orion 1+2 - $2.39 on GOG Prince of Persia: The Sands of Time - $1.99 on GOG Prince of Persia: Warrior Within - $1.99 on GOG EVERSPACE - $1.99 on GOG Total Annihilation: Commander Pack - $0.99 on GOG Keep in mind that availability and pricing for some deals could vary depending on the region. That's it for our pick of this weekend's PC game deals, and hopefully, some of you have enough self-restraint not to keep adding to your ever-growing backlogs. As always, there are an enormous number of other deals ready and waiting all over the interwebs, as well as on services you may already subscribe to if you comb through them, so keep your eyes open for those, and have a great weekend.
    • When will the Photos app be updated to remember the window size and position when reopened? They addressed this issue in a 2024 version of the app (though I can't recall the build number). Unfortunately, after that specific version, the problem persists! Please prioritise this fix in your K2 schedule. Additionally, the Snipping Tool has lost the ability to capture the Windows Taskbar starting from the 2024 version!
    • Same, never saw it on Android or iOS. Guess only some people got it *shrugs*
    • Anthropic pulls Fable 5 and Mythos 5 after US export control order by Pradeep Viswanathan In April this year, Anthropic launched the Claude Mythos Preview frontier model with state-of-the-art cyber and coding capabilities for a select set of companies around the world. After preparing appropriate guardrails, early this week, Anthropic launched Claude Fable 5 and Mythos 5, its most capable AI models. Claude Fable 5 is for general users and comes with strict safeguards, while Mythos 5 is designed with fewer safeguards for cybersecurity and biology use cases. Today, Anthropic abruptly suspended access to its Fable 5 and Mythos 5 AI models for all customers after receiving an export control directive from the US government. The company received the directive from the government today at 5:21 p.m. ET, and the received letter did not provide any details regarding the national security concern. Anthropic understands that the government became aware of a method to bypass, or “jailbreak,” Fable 5, which might be the reason behind the directive. The order was issued under national security authorities and requires the company to suspend all access to Fable 5 and Mythos 5 by any foreign national, whether they are inside or outside the United States. The restriction also applies to foreign national employees working at Anthropic. As a result, the company has disabled both models for all customers to ensure compliance. Access to previous Anthropic models like Opus and Sonnet is not affected by this government order. The company highlighted that it had developed strong safeguards to reduce the possibility that Fable is misused for tasks related to cybersecurity. In fact, many developers are complaining that the safeguards are going overboard. Additionally, the company worked with the US government, the UK AISI, multiple private third-party organizations, and internal teams to red-team Fable’s safeguards for thousands of hours. Finally, Anthropic noted that no testers have yet been able to find a universal jailbreak on Fable 5. As expected, Anthropic disagrees that a narrow potential jailbreak should lead to the recall of a commercial model used by hundreds of millions of people. It warned that applying this standard across the AI industry could effectively halt new frontier model deployments. Anthropic concluded by mentioning that it is working to restore access to Fable 5 and Mythos 5 as soon as possible and plans to share more details within the next 24 hours.
  • Recent Achievements

    • Week One Done
      ssd21345 earned a badge
      Week One Done
    • Contributor
      MarkHughes4096 went up a rank
      Contributor
    • Dedicated
      jordanspringer earned a badge
      Dedicated
    • Rookie
      Rimplesnort went up a rank
      Rookie
    • One Year In
      Markus94287 earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      503
    2. 2
      +Edouard
      176
    3. 3
      PsYcHoKiLLa
      147
    4. 4
      ATLien_0
      92
    5. 5
      Steven P.
      79
  • Tell a friend

    Love Neowin? Tell a friend!