注册 登录
编程论坛 C++教室

error LNK2001: unresolved external symbol??

I_swear 发布于 2007-05-15 16:46, 2596 次点击

#include <iostream>
using namespace std;
class Juzhen
{
public:
static void set1();
//void set1();
void set2();
void display();
private:
static int x;
static int y;
//int x;
//int y;
int*p;
};
void Juzhen::set1()
{
cout<<"输入行数和列数"<<endl;
cin>>x>>y;
}
void Juzhen::set2()
{
int a=(x-1)*(y-1);
p=new int [a];
cout<<"输入一个"<<x<<"行"<<y<<"列的矩阵"<<endl;
for(int i=0,b=0;i<x;i++)
for(int j=0;j<y;j++,b++)
cin>>p[b];
cout<<endl;
}
void Juzhen::display()
{
for(int i=0,b=0;i<x;i++){
for(int j=0;j<y;j++,b++)
cout<<p[b]<<" ";
cout<<endl;}
}
int main()
{
Juzhen j1;
Juzhen::set1();
//j1.set1();
j1.set2();
j1.display();
return 0;
}

错误报告:
--------------------Configuration: 的 - Win32 Debug--------------------
Linking...
lizi.obj : error LNK2001: unresolved external symbol "private: static int Juzhen::x" (?x@Juzhen@@0HA)
lizi.obj : error LNK2001: unresolved external symbol "private: static int Juzhen::y" (?y@Juzhen@@0HA)
Debug/的.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

的.exe - 1 error(s), 0 warning(s)


请问这是什么错误啊?怎样才能解决啊?谢谢~~

8 回复
#2
aipb20072007-05-15 16:57
静态变量初始化呢?
#3
I_swear2007-05-15 17:33

静态变量初始化后出现的错误:
--------------------Configuration: 的 - Win32 Debug--------------------
Compiling...
lizi.cpp
Linking...
qdds.obj : error LNK2005: "public: static void __cdecl Juzhen::set1(void)" (?set1@Juzhen@@SAXXZ) already defined in lizi.obj
qdds.obj : error LNK2005: "public: void __thiscall Juzhen::set2(void)" (?set2@Juzhen@@QAEXXZ) already defined in lizi.obj
qdds.obj : error LNK2005: "public: void __thiscall Juzhen::display(void)" (?display@Juzhen@@QAEXXZ) already defined in lizi.obj
qdds.obj : error LNK2005: _main already defined in lizi.obj
Debug/的.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

的.exe - 1 error(s), 0 warning(s)

#4
aipb20072007-05-15 17:48

肯定是初始化错了!


int Juzhen:: x = 1;
int Juzhen:: y = 1;
这样哦!!!

#5
I_swear2007-05-15 18:04
回复:(aipb2007)肯定是初始化错了![em05]int Juzh...

按你说的初始化了,错误报告还是没任何改变!
#6
I_swear2007-05-15 18:08
在网上找到个类似的错误,可惜没有给出解决的方案,那里的说法是Juzhen类的成员函数重定义了,造成无法链接。
#7
aipb20072007-05-15 18:08

问题是你初始化的位置,我看我发上来算了,呵呵!
[CODE]#include <iostream>
using namespace std;
class Juzhen
{
public:
static void set1();
//void set1();
void set2();
void display();
private:
static int x;
static int y;
//int x;
//int y;
int*p;
};
int Juzhen:: x = 1;
int Juzhen:: y = 1;

void Juzhen::set1()
{
cout<<"输入行数和列数"<<endl;
cin>>x>>y;
}
void Juzhen::set2()
{
int a=(x-1)*(y-1);
p=new int [a];
cout<<"输入一个"<<x<<"行"<<y<<"列的矩阵"<<endl;
for(int i=0,b=0;i<x;i++)
for(int j=0;j<y;j++,b++)
cin>>p[b];
cout<<endl;
}
void Juzhen::display()
{
for(int i=0,b=0;i<x;i++){
for(int j=0;j<y;j++,b++)
cout<<p[b]<<" ";
cout<<endl;}
}
int main()
{
Juzhen j1;
Juzhen::set1();
//j1.set1();
j1.set2();
j1.display();
return 0;
}[/CODE]

再有问题,就无语了!我能通过的!

#8
未入流小菜鸟2007-05-15 21:12
静态成员变量要在类外部定义一下,倒不一定要初始化。
在类里面只能算声明。
#9
linaiyu2007-05-15 23:45
对于静态成员,在主函数使用之前必须初始化
1