首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 为啥会出error LNK2001: Unsolved external symbol ? [已结贴,结贴人:crazypeter2005]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-07 14:10:07 楼主
    有2个问题
    1
    在头文件里面声明1个结构体
    LSQAStat.h

    struct _RunStatusInfo
    {
    int Index; //operation type index
        SVTString tstName; //tstName ---most common operations
        int count; //loop
        float sum; //response time sum
        float min; //min response time
        float max; //max response time
    float sleep; //sleep time(unused)
    int err_cnt; //error counter
    int exec_cnt; //executr counter
    } ;

    然后在CPP文件里面
    首先
    struct _RunStatusInfo statusinfo[20];//20种不同但类似的操作.

    再LSQAStat::LSQAStat(void)
    {
    //初始化该结构体就不会出错,
    }

    但是如果我想把struct _RunStatusInfo statusinfo[20];放进该构造函数就会抛
    error LNK2001: Unsolved external symbol "struct_RuinStatusInfo *statusInfo" ......
    fatal error Link1120:1 unresolved externals

    这个是咋回事呢?

    2 我如何起LSQAStat为1个且仅仅1个Instance,每隔10分钟起来读该结构体数组,并且写入文件(可能需要加锁?),写点别的进程来不断更改statusinfo[20]的每个结构体数组的值.
    为了能在别的进程源码里面取的那些count/max等值,我该如何设计LSQAStat这个类以及
    statusinfo[20]这个结构体?
    这个LSQAStat就是为了能定时把一些统计信息取出来而设计的.

    大家帮忙给点建议啊?
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-07 14:23:111楼 得分:15
    问题1.类还没有定义完成怎么可能用来定义变量?
    所以出错了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-07 14:39:042楼 得分:0
    象我这样把struct _RunStatusInfo statusinfo[20];//20种不同但类似的操作.
    声明在构造函数外边,是不是所有的类都可以更改这个数组啊?我只想拥有1份struct _RunStatusInfo statusinfo[20]
    那又该如何定义呢?
    把这个数组定义为LSQAStat的成员?
    那么我定义LSQAStat为SingleTon的话,是不是在A.h中#include "LSQAStat.h",然后在A.cpp中struct _RunStatusInfo statusinfo[20]就只有1份?

    还有就是我有个别的类A,在A.h中#include "LSQAStat.h",然后在A.cpp中DMQAStat* qastat;
    同时在B.h中#include "LSQAStat.h",然后在B.cpp中DMQAStat* qastat
    那我的struct _RunStatusInfo statusinfo[20]就会出现2份?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-07 15:01:413楼 得分:0
    class A//A只做A操作
    {
    run test1;
    if (pass)
    logPerfFile < < " *TIME* TO PERFORM " < < actionName < < " " < < elapsedTime < < endl;
    statusinfo[0].avg = LSQAStat->getavg(elapsedTime);//取新的均值
    statusinfo[0].exec_cnt++;


    else
    logERRORFile < < " ERROR PERFORM " < < actionName < < " " < < elapsedTime < < endl;
    statusinfo[0].err_cnt++;
    }

    class B//B只做B操作
    {
    run test1;
    if (pass)
    logPerfFile < < " *TIME* TO PERFORM " < < actionName < < " " < < elapsedTime < < endl;
    statusinfo[1].avg = LSQAStat->getavg(elapsedTime);//取新的均值
    statusinfo[1].exec_cnt++;


    else
    logERRORFile < < " ERROR PERFORM " < < actionName < < " " < < elapsedTime < < endl;
    statusinfo[1].err_cnt++;
    }

    在外边有个Runcases方法可以取count(执行了几轮)
    statusinfo[0]只有A操作
    statusinfo[1]只有B操作

    我该如何设计LSQAStat类和statusinfo[20]这个结构体呢?

    别的打文件和锁的事情再说吧?

    问题是我不想出现多份statusinfo[20],只想要1份.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-07 15:13:554楼 得分:0
    有点明白了,
    类似于以下的代码
    程序如下:

    程序文件1:
    #include <iostream>
    int n = 8;
    void f();
    int main(){
    std::cout < <n < <"\n";
    f();
    }

    程序文件2:
    #include <iostream>

    int n;
    void f(){
    std::cout < <n < <"\n";
    }

    输出内容为:
    8
    0

    我的statusinfo[20]是在LSQAStat的H和CPP文件中声明和赋初值的,
    但是在A和B中分别实例化了 ,或许我该把statusinfo[20]声明为静态的??
    大侠们给点答复啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-07 15:32:515楼 得分:0
    用静态变量会造成内存泄露吗?
    是指析构函数没写好,没有回收这些静态变量?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-08 08:06:436楼 得分:10
    看起来lz没用弄清楚声明和定义的区别。

    在CPP文件顶部定义个结构,那就是只有这一份结构体分配了内存。要是放在成员变量里,如果不声明成静态的,每个类的实例就有一份结构体分配了内存。

    如果把LQAStat实现为Singleton,可以保证只有一个访问点。

    多个进程如果都要读取该结构体,如果这些进程都在同一个机器上运行,那么使用内存映射要好一些。稍微做点同步处理就行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-08 08:07:507楼 得分:5
    还有lz开始说的一放进类里面初始化就链接失败,不知道你是怎么写的代码,不好说咋回事~
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved