Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
[已解决]关于C++的一点问题
Experiences and Insight
363
views ·
2
replies ·
To
floor
Go
Emmmmmmmm
deepin
2019-03-23 05:46
Author
本帖最后由 Emmmmmmmm 于 2019-3-23 13:30 编辑
诸君帮我看看是哪里出了问题编译器报错:
/tmp/ccMJgUYl.o:在函数‘objects:
bjects()’中:
1.cpp
.text._ZN7objectsC2Ev[_ZN7objectsC5Ev]+0x61):对‘objects::top’未定义的引用
/tmp/ccMJgUYl.o:在函数‘objects::add()’中:
1.cpp
.text._ZN7objects3addEv[_ZN7objects3addEv]+0x9c):对‘objects::top’未定义的引用
1.cpp
.text._ZN7objects3addEv[_ZN7objects3addEv]+0x184):对‘objects::top’未定义的引用
1.cpp
.text._ZN7objects3addEv[_ZN7objects3addEv]+0x297):对‘objects::top’未定义的引用
1.cpp
.text._ZN7objects3addEv[_ZN7objects3addEv]+0x2a0):对‘objects::top’未定义的引用
/tmp/ccMJgUYl.o:1.cpp
.text._ZN7objects3addEv[_ZN7objects3addEv]+0x2a6): 跟着更多未定义的参考到 objects::top
collect2: error: ld returned 1 exit status
源码:
#include
using namespace std;
class objects
{
static int top;
char *name1;
char *name2;
int *start;
int *end;
public:
objects()
{
start = new int [0];
end = new int [0];
name1 = new char [0];
name2 =new char [0];
top = 0;
cout << "\n[Docker was maked.]";
}
~objects()
{
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
cout << "\n[Docker was deleted.]";
}
objects add()
{
char xname[2];
int xnumber[2];
cout << "\n[Please enter the name of new project.]\n>>";
cin.get(xname,2);
cout << "\n[Please enter the start number of new object]\n>>";
cin >> xnumber[0];
cout << "[Please enter the end number of new object.]\n>>";
cin >> xnumber[1];
const int tops = top;
int numberbase[tops][2];
char namebase[tops][2];
for(int sizes = 0;sizes <= top;sizes++)
{
numberbase[sizes][0] = start[sizes];
numberbase[sizes][1] = end[sizes];
namebase[sizes][0] = name1[sizes];
namebase[sizes][1] = name2[sizes];
}
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
top++;
const int topss = top;
start = new int [topss];
end = new int [topss];
name1 = new char [topss];
name2 = new char [topss];
for(int sizes = 0;sizes <= top-1;sizes++)
{
start[sizes] = numberbase[sizes][0];
end[sizes] = numberbase[sizes][1];
name1[sizes] = namebase[sizes][0];
name2[sizes] = namebase[sizes][1];
}
start[top] = xnumber[0];
end[top] = xnumber[1];
name1[top] = xname[0];
name2[top] = xname[1];
cout << "\n[Object was maked.]\n";
}
objects delet()
{
cout << "[Choose which object you want to delete.]\n>>";
const int tops=top-1;
int numberbase[tops][2];
char namebase[tops][2];
int point;
cin >> point;
int xsize=0;
for(int sizes = 0;sizes <= top;sizes++)
{
if(sizes!=point)
{
numberbase[xsize][0] = start[sizes];
numberbase[xsize][1] = end[sizes];
name1[xsize] = name1[sizes];
name2[xsize] = name2[sizes];
xsize++;
}
}
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
top--;
const int topss = top;
start = new int [topss];
end = new int [topss];
name1 = new char [topss];
name2 = new char [topss];
for(int size = 0;size <= top;size++)
{
start[size] = numberbase[size][0];
end[size] = numberbase[size][1];
name1[size] = namebase[size][0];
name2[size] = namebase[size][1];
}
cout << "\n[Object was deleted.]\n";
}
objects showlist()
{
cout << "name start end" << endl;
for(int size=0;size <= top;size++)
{
cout << " " << name1[size] << name2[size] << " " << start[size] << " " << end[size] << endl;
}
}
};
int main()
{
objects m;
int point;
while(point == 666)
{
cout << "[Choose which action you want to do.]\n>>";
cin >> point;
switch(point)
{
case 0:m.add();break;
case 1:m.delet();break;
case 2:m.showlist();break;
default:break;
}
}
m.~objects();
}
Reply
Like 0
Favorite
View the author
All Replies
牧野
deepin
2019-03-23 07:33
#1
这么改就好了。
Reply
Like 0
View the author
ritter
deepin
2019-03-23 14:14
#2
本帖最后由 ritter 于 2019-3-23 06:51 编辑
1) member function标志了返回objects,你却没有返回值,虽然编译能通过,但是有问题。
2) 手动call destructor也是活久见。
3) 声明了static却没有定义,所以报错。在class objects外面定义int objects::top=0;
5) while(point == 666) 应该用if。但是anyway point几乎不可能等于666。你随便声明一个point,正好那个地址里面的值是666的可能性也太低了几乎不存在。
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
[Tutorial] deepin25 WSL Offline Installation Guide
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Events
More
诸君帮我看看是哪里出了问题编译器报错:
/tmp/ccMJgUYl.o:在函数‘objects:
1.cpp
/tmp/ccMJgUYl.o:在函数‘objects::add()’中:
1.cpp
1.cpp
1.cpp
1.cpp
/tmp/ccMJgUYl.o:1.cpp
collect2: error: ld returned 1 exit status
源码:
#include
using namespace std;
class objects
{
static int top;
char *name1;
char *name2;
int *start;
int *end;
public:
objects()
{
start = new int [0];
end = new int [0];
name1 = new char [0];
name2 =new char [0];
top = 0;
cout << "\n[Docker was maked.]";
}
~objects()
{
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
cout << "\n[Docker was deleted.]";
}
objects add()
{
char xname[2];
int xnumber[2];
cout << "\n[Please enter the name of new project.]\n>>";
cin.get(xname,2);
cout << "\n[Please enter the start number of new object]\n>>";
cin >> xnumber[0];
cout << "[Please enter the end number of new object.]\n>>";
cin >> xnumber[1];
const int tops = top;
int numberbase[tops][2];
char namebase[tops][2];
for(int sizes = 0;sizes <= top;sizes++)
{
numberbase[sizes][0] = start[sizes];
numberbase[sizes][1] = end[sizes];
namebase[sizes][0] = name1[sizes];
namebase[sizes][1] = name2[sizes];
}
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
top++;
const int topss = top;
start = new int [topss];
end = new int [topss];
name1 = new char [topss];
name2 = new char [topss];
for(int sizes = 0;sizes <= top-1;sizes++)
{
start[sizes] = numberbase[sizes][0];
end[sizes] = numberbase[sizes][1];
name1[sizes] = namebase[sizes][0];
name2[sizes] = namebase[sizes][1];
}
start[top] = xnumber[0];
end[top] = xnumber[1];
name1[top] = xname[0];
name2[top] = xname[1];
cout << "\n[Object was maked.]\n";
}
objects delet()
{
cout << "[Choose which object you want to delete.]\n>>";
const int tops=top-1;
int numberbase[tops][2];
char namebase[tops][2];
int point;
cin >> point;
int xsize=0;
for(int sizes = 0;sizes <= top;sizes++)
{
if(sizes!=point)
{
numberbase[xsize][0] = start[sizes];
numberbase[xsize][1] = end[sizes];
name1[xsize] = name1[sizes];
name2[xsize] = name2[sizes];
xsize++;
}
}
delete [] start;
delete [] end;
delete [] name1;
delete [] name2;
top--;
const int topss = top;
start = new int [topss];
end = new int [topss];
name1 = new char [topss];
name2 = new char [topss];
for(int size = 0;size <= top;size++)
{
start[size] = numberbase[size][0];
end[size] = numberbase[size][1];
name1[size] = namebase[size][0];
name2[size] = namebase[size][1];
}
cout << "\n[Object was deleted.]\n";
}
objects showlist()
{
cout << "name start end" << endl;
for(int size=0;size <= top;size++)
{
cout << " " << name1[size] << name2[size] << " " << start[size] << " " << end[size] << endl;
}
}
};
int main()
{
objects m;
int point;
while(point == 666)
{
cout << "[Choose which action you want to do.]\n>>";
cin >> point;
switch(point)
{
case 0:m.add();break;
case 1:m.delet();break;
case 2:m.showlist();break;
default:break;
}
}
m.~objects();
}