我不熟悉结构,所以如果这是一个愚蠢的问题,请耐心等待。我有一个头文件和四个.cpp文件都包含它。我有一个名为ToDoLista的结构,它有字符串nameIt和int DeadLine。然后我有类型名称我不知道的东西,如足球和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.
如果我尝试移动它,这个结构看起来很好看,因为如果它在标题中它被包含三次并且由于“多次定义”而无法运行。如果我把它放在我的三个非主要cpp文件之一中,似乎结构将不起作用,因为其中一些必须在main()中定义。所以现在它在我的主cpp文件中,但我有使用这些值的函数,这些函数在我的非主cpp文件中,据我所知在主文件之前编译。为了解决这个问题,我将结构声明放在标题中,并在我的主要内容中定义(我可能有错误的说法)然后我说'好吧,运行'CheckItTwice'函数。
//MAIN
Soccer.DeadLine=6;
//and so on for all six, like before.
//ok, NOW run the fx.
CheckItTwice(Soccer.Deadline, Soccer.nameIt);
这里的问题是,如果我告诉CheckItTwice说,cout字符串或int,它运行程序没有错误,但在cout应该在控制台中什么都不返回,因为显然他们还没有被定义然而,就功能而言。为什么这个/你知道解决这个问题吗?
答案 0 :(得分:0)
在标题中定义结构,并在cpp文件中定义#include
标题。在标题中尝试添加
#pragma once
位于头文件的顶部。这是Microsoft特定的扩展 - 记录为here
更便携的版本是添加
#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文件中删除struct定义。
答案 1 :(得分:0)
为了避免"定义的乘法"您需要在头文件中定义结构的错误,并在顶部放置#pragma once
或#ifndef...etc
块。见this here.
将头文件包含在您计划使用结构的任何实现(cpp)文件中。
该行
ToDoLista Soccer, DropOffMax, CookDinner;
声明结构ToDolista
的三个实例,称为Soccer
,DropOffMax
和CookDinner
。它们是不是类型,它们是 类型的实例,类型为ToDolista
。
我无法评论CheckItTwice()
的内容,因为您没有提供,但look here有关使用cout的指导。您可能需要考虑将结构作为一个参数传递给此方法,最好是作为const引用。
答案 2 :(得分:0)
我使用我在拼命搜索时看到的东西解决了这个问题:extern。似乎如果我把声明放在标题中,cpp中的定义,然后在另一个cpp中再次声明对象,但在它之前使用'extern',就像保留原始定义中的值一样,它就像魅力一样
Header.h
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);
这对我有用,我希望这个'回答'可以帮助别人。