Jor*_*hez 1 c++ reference object
我认为我做的错误是如此愚蠢,但我不知道我做错了什么.我有一个静态和非静态变量类和一些方法,都是公开的.在我的程序中,我想创建一个对象,并通过引用将此对象传递给一般方法.
该程序不编译,编译器抛出非常奇怪的错误消息.
对于建筑x86_64的未定义符号: "prueba :: NUM",从引用:_main在ccbRZYqe.o metodoC(prueba*)在ccbRZYqe.o prueba :: prueba()在ccbRZYqe.o prueba :: INICIO()在ccbRZYqe.o "prueba :: flag",引用自:ccbRZYqe.o中的metodoC(prueba*).ccbRZYqe.o中的prueba :: prueba()ccbRZYqe.o中的prueba :: inicio()ld:找不到架构x86_64的符号collect2:ld返回1退出状态
码
#include <iostream>
using namespace std;
class prueba
{
private:
public:
static bool flag;
static int num;
float complejo;
// Metodos
//--------------
prueba()
{
flag = false;
num = 0;
complejo = 0.0;
}
void inicio()
{
flag = true;
num = 5;
complejo = 3.2;
}
bool cambio()
{
flag++;
num++;
complejo++;
}
};
bool metodoC(prueba* ensayo)
{
cout << "-----------------------------------------" << endl;
cout << "- flag: " << ensayo->flag << endl;
cout << "- num: " << ensayo->num << endl;
cout << "- Complejo: " << ensayo->complejo << endl;
cout << "-----------------------------------------" << endl;
return true;
}
//-----------------------------------
// M A I N
//-----------------------------------
int main(int argc, char *argv[])
{
prueba test;
test.inicio();
test.num += 2;
test.complejo += 5.2;
metodoC( &test );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您需要定义静态成员.他们只是宣布.
class prueba {
// as before
};
Run Code Online (Sandbox Code Playgroud)
并在实现文件中:
bool prueba::flag=false;
int prueba::num=0;
Run Code Online (Sandbox Code Playgroud)
请注意,您不应将定义放在标题中,因为您将获得每个翻译单元的静态定义.您需要将它们放在一个实现文件中,然后用于创建客户端可以构建的单个目标文件.
但是要注意,每次实例化一个新prueba
对象时,都要重置构造函数中的静态成员.
归档时间: |
|
查看次数: |
129 次 |
最近记录: |