[英]My Function Doesn't Know My Struct Values (c++)
我不熟悉結構,因此如果這是一個愚蠢的問題,請耐心等待。 我有一個頭文件和四個都包含它的.cpp文件。 我有一個名為ToDoLista的結構,它具有字符串nameIt和int DeadLine。 然后我得到了我不知道類型名稱的東西,例如Soccer和DropOffMax之類的東西。
ToDoLista Soccer, DropOffMax, CookDinner;
Soccer.DeadLine=6;
Soccer.nameIt="SOCCER";
//and so on, for a total of six, 3 ints and 3 strings definitions.
如果我嘗試將其移動,則此結構似乎很嚴格,因為如果它在標頭中,則包含3次,並且由於“乘以定義”而無法運行。 如果將其放在我的三個非主要cpp文件之一中,則該結構似乎無法正常工作,因為其中一些必須在main()中定義。 所以現在它在我的主cpp文件中,但是我有使用這些值的函數,而這些函數在我的非主cpp文件中,據我所知,這些文件在主cpp文件之前就已編譯。 為了解決這個問題,我將struct聲明放在標題中,並將定義放在我的main中(我可能用錯了措辭),然后我說“好吧,運行函數'CheckItTwice'。
//MAIN
Soccer.DeadLine=6;
//and so on for all six, like before.
//ok, NOW run the fx.
CheckItTwice(Soccer.Deadline, Soccer.nameIt);
這里的問題是,如果我告訴CheckItTwice,說出字符串或int,它將運行該程序而不會出現錯誤,但是在應該將cout放置在控制台中則什么也不返回,因為顯然它們尚未被定義為就功能而言。 為什么這樣/您知道如何解決?
在頭文件中定義結構,然后在cpp文件中#include
該頭文件。 在標題中嘗試添加
#pragma once
在頭文件的頂部。 這是Microsoft特定的擴展名- 在此處記錄
更便攜的版本是添加
#ifndef _SOME_DEF_
#define _SOME_DEF_
struct ToDoLista {
string namit;
string project;
int status;
int speed;
int difficulty;
int priority;
int deadline;
}
#endif // _SOME_DEF_
確保從.cpp文件中刪除結構定義。
為了避免“定義的乘法”錯誤,您需要在頭文件中定義結構,並在頂部放置#pragma once
或#ifndef...etc
塊。 在這里看到這個。
將頭文件包含在您計划在其中使用該結構的任何實現(cpp)文件中。
線
ToDoLista Soccer, DropOffMax, CookDinner;
聲明結構ToDolista
三個實例,分別稱為Soccer
, DropOffMax
和CookDinner
。 他們不是類型,他們是一個類型的實例,該類型是ToDolista
。
由於您未提供CheckItTwice()
的內容, CheckItTwice()
我無法對其進行評論,但是請在此處查找有關使用cout的指南。 您可能要考慮將struct作為一個參數傳遞給此方法,最好將其作為const引用。
我使用在網上拼命搜索時看到的東西解決了這個問題:extern。 看來,如果我將聲明放在標頭中,將定義放在cpp中,然后在另一個cpp中再次聲明對象,但在其前加上“ extern”,就可以保持原定義中的值,這就像一個魅力。
標頭
struct ToDoLista{
string namit;
string project;
int status;
int speed;
int difficulty;
int priority;
int deadline;
};
Side.cpp
ToDoLista Pushups, Tumblr, Laundry, CleanRoom, CleanHouse, Portfolio;
void CheckItTwice(int staytus, string name){
if(staytus==1){//not on the list
staytus==2;
cout << "hurry up and" << name << " okay?" << endl;
Main.cpp
extern ToDoLista Pushups, Tumblr, Laundry, CleanRoom, CleanHouse, Portfolio;
Pushups.namit = "Push Ups";
Pushups.status = 1;
Pushups.speed = 0;
Pushups.difficulty = 0;
Pushups.priority = 0;
Pushups.project = "Get Fit";
Pushups.deadline = 20131102;
CheckItTwice(Pushups.status,Pushups.namit);
這對我有用,我希望這個“答案”可以幫助其他人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.