我开始在我的计算机上构建一个项目。在我的计算机上编译的项目,但当我将它复制到另一台计算机时,它有致命的错误(它在visual c ++ express 2010上的工作)。它仍然很小所以我将复制所有的项目。
源文件 - > main.cpp:
#include <iostream>
#include <string>
using namespace std;
#include "List.h"
void products_menu(){
return;
}
void stores_menu(){
return;
}
void costumers_menu(){
return;
}
int main(){
int option;
Products a;
do{
cin>>option;
if(option==1)
products_menu();
//option funcion
if(option==2)
stores_menu();
//option funcion
if(option==3)
costumers_menu();
//option funcion
}while(option!=4);
}
源文件 - &gt; List.cpp:
#include <iostream>
#include <string>
using namespace std;
#include "List.h"
void products_menu(){
return;
}
void stores_menu(){
return;
}
void costumers_menu(){
return;
}
int main(){
int option;
Products a;
do{
cin>>option;
if(option==1)
products_menu();
//option funcion
if(option==2)
stores_menu();
//option funcion
if(option==3)
costumers_menu();
//option funcion
}while(option!=4);
}
标题文件 - &gt; List.h:
#pragma once
#ifndef LIST_H
#define LIST_H
#include <string>
using namespace std;
class Products{
private:
typedef struct node{
int id;
string name;
int price;
node* next;
};
//typedef struct node* nodePtr;
//nodePtr head;
public:
Products();
//~Products();
void addProduct(int id, string& name, int price);
void updateNameProduct(int id, string& oldName, string& newName);
void updatePriceProduct(int id, int oldPrice, int newPrice);
void printProducts();//
};
Products* first;
Products* nodePtr;
#endif
这是它给我的错误:
错误LNK2005:已在List.obj中定义的“class Products * nodePtr”(?nodePtr @@ 3PAVProducts @@ A)
错误LNK2005:已在List.obj中定义的“class Products * first”(?first @@ 3PAVProducts @@ A)
错误LNK1169:找到一个或多个多重定义的符号
答案 0 :(得分:0)
如果必须使用全局变量(这通常是一个坏主意),那么您就无法在标题中定义它们。它们受一个定义规则的约束,因此只能在一个源文件中定义。
在标题中声明它们:
extern Products* first;
并在源文件中定义它们:
Products* first;
但听起来你想要的东西更像是注释掉的声明:指向第一个node
的指针,作为Products
类的成员,没有奇怪的全局变量。