C++ 链接错误

2024-04-09

我有多个通过 hxx 头文件和继承连接的类。这都是关于操作系统模拟的。 我单独编译它们,看看是否有任何语法错误,但事实并非如此。相反,当我编译主驱动程序 osTester.cxx 时,我得到这样的链接错误

#include <iostream>
#include <ostream>
#include <vector>
#include<string>
//#include <boost/shared_ptr.hpp>
#include "OS.hxx"
#include "Ram.hxx"
#include "Cpu.hxx"
#include "HardDisk.hxx"
#include "JobCreationFactory.hxx"
#include "Mouse.hxx"
#include "Monitor.hxx"
#include "Keyboard.hxx"

using namespace std;
typedef vector<int>LISTOFINT;
typedef LISTOFINT::iterator INT_ITER;

//namespace bo=boost;
//using bo::shared_ptr;
/* This is the main driver of the simulation,it makes all simulated devices available 
 and ready for use before operating system takes over(osTakeOver())
 */

int main(){
    
    int numberOfJobs = 0;
    bool simulate = false;
    string start;
    LISTOFINT schedulingAlgorithms; // 1 for SJF(Shortest Job first) and 2:for RR(Round Robbin)
    LISTOFINT numberOfResourcesAvailable;
    int mouseAvailable;
    int monitorAvailable;
    int keyboardAvailable;
    HardDisk HD;
    OS myOS;
    Cpu myCpu;
    Ram myRam;
    Mouse myMouse;
    Monitor myMonitor;
    Keyboard myKeyboard;
    JobCreationFactory j;
    //j.test();
    j.createFiles(HD);
    j.createJobs(HD);
    
    //set defaut number of jobs to be used in the simulation .. allow user to input number of jobs
    cout << "Enter number of Jobs to be used in the simulation (eg 40000) followed by space then  'S' for Start:";
    while (cin >> numberOfJobs >> start && !simulate) {
        simulate = true;
        HD.setNumberOfJobs(numberOfJobs);
    }   
    cout << "Enter the number of processes that a mouseQ can handle:(say 6)";
    cin >> mouseAvailable;
    cout << "Enter the number of processes that a monitoQ can handle:(say 7)";
    cin >> monitorAvailable;
    cout << "Enter the number of processes that a keyboardQ can handle:(say 8)";
    cin >> keyboardAvailable;
    numberOfResourcesAvailable.push_back(mouseAvailable);
    numberOfResourcesAvailable.push_back(monitorAvailable);
    numberOfResourcesAvailable.push_back(keyboardAvailable);
    //setAvailable Resources
    myOS.setAvailable(numberOfResourcesAvailable);
    
    /*simulate based on SJF then RR using the same number of resources then compare results
     *repeating the same algorithm a few more times would give a better comparison since this simulation
     *is entirely based on random number generation
    */
    schedulingAlgorithms.push_back(1);
    schedulingAlgorithms.push_back(2);
    INT_ITER sBegin = schedulingAlgorithms.begin();
    INT_ITER sEnd = schedulingAlgorithms.end();
    
    //at this point all devices are ready so an assumption can be made that 
    //BIOS has successfully checked devices hence BIOSdone = true
    //once everything is ready BIOS Loads OS
    
    for (; sBegin != sEnd; ++sBegin) {// for both algorithms
        myOS.setSchedulingAlgorithm(*sBegin);
        myOS.osTakeOver(HD,myRam,myCpu,myMouse,myMonitor,myKeyboard);
    }
    //for now the smulation progress will be seen on the console
    
    return 0;
    
}

我尝试过使用 CMake 但仍然收到以下错误

Linking CXX executable osTester
Undefined symbols:

  "JobCreationFactory::createFiles(HardDisk)", referenced from:
      _main in osTester.cxx.o
  "OS::setAvailable(std::vector<int, std::allocator<int> >)", referenced from:
      _main in osTester.cxx.o
  "OS::osTakeOver(HardDisk, Ram, Cpu, Mouse, Monitor, Keyboard)", referenced from:
      _main in osTester.cxx.o
  "HardDisk::setNumberOfJobs(int)", referenced from:
      _main in osTester.cxx.o
  "OS::setSchedulingAlgorithm(int)", referenced from:
      _main in osTester.cxx.o
  "JobCreationFactory::createJobs(HardDisk)", referenced from:
      _main in osTester.cxx.old: symbol(s) not found

collect2: ld returned 1 exit status
make[2]: *** [src/osTester] Error 1
make[1]: *** [src/CMakeFiles/osTester.dir/all] Error 2
make: *** [all] Error 2

请帮忙!!!


Update:

我在 cxx 中有 JobCreationFactory::createFiles ,在 .hxx 中有原型。

我真的不明白主要问题。请分别参考下面的Jobcreationfactory.cxx和.hxx,以及osTester.cxx(包含在之前的帖子中)。我尝试调用来自不同类(例如操作系统)的方法,但出现相同的链接错误。

#include<iostream>
#include<sstream>
#include<vector>
#include<algorithm>
#include "random.hxx"
#include "Jobs.hxx"
#include "HardDisk.hxx"
#include "File.hxx"

//using namespace std;
//typedef vector<int> LISTOFINT;
//LISTOFINT::iterator INT_ITER;

class JobCreationFactory{
    int numOfJobs;
    int numOfFiles;
    int time;
    int size;
    LISTOFINT header;
    
    JobCreationFactory()
    :numOfJobs(0),time(0),size(0)
    {
    }
    
     int getNumberOfJobs() 
    {
        return numOfJobs;
    }
    
     void createFiles(HardDisk hd)
    {   string file = "File";
        string intval;
        stringstream ss (stringstream::in | stringstream::out);
        RandomSeq r1(10000, 20000);
        numOfFiles = r1();
        RandomSeq r2(10, 100);
        for(int j = 0; j<=numOfFiles; j++ )
        {
            ss << j+1;
            ss >> intval;
            file.append(intval);
            hd.storeFiles(File(file,r2()));
        }
    }
    
     void createJobs(HardDisk hd)
    {
        string job = "Job";
        string intval;
        stringstream ss (stringstream::in | stringstream::out);
        RandomSeq r1(60000,70000);
        numOfJobs = r1();
        int instructionException = (int)(0.1 * numOfJobs);
        
        for (int i = 1; i < getNumberOfJobs()+ 1; i++) 
        {
            RandomSeq r1(0, 2);
            RandomSeq r2(0, numOfFiles);
            size = assignSize(); 
            time = assignTime(size);
            setHeader();
            ss << i;
            ss >> intval;
            job.append(intval);
            Jobs newJob(job,size, time, header,r1());
            if(i%instructionException == 0)
            {
                newJob.setInstructionException(true);
            }
            for(int k = 0; k<newJob.getNumberOfFiles();k++)
            {
                newJob.associateJobWithFiles(k, r2());
            }
            hd.storeJobs(newJob);
        }
    }
    
     int assignSize()
    {
        RandomSeq r1(500,5000);
        int size = r1();
        return size;
    }
    
     int assignTime(int size)
    {
        int time =0;
        RandomSeq r1(10,20);
        RandomSeq r2(20,30);
        RandomSeq r3(30,40);
        RandomSeq r4(40,50);
        RandomSeq r5(50,60);
        RandomSeq r6(60,70);
        RandomSeq r7(70,80);
        RandomSeq r8(80,90);
        RandomSeq r9(90,100);
        
        if(size>=500&&size < 1000)
        {
            time = r1();
        }
        else if(size>=1000&&size < 1500)
        {
            time = r2();
        }
        else if(size>=1500&&size < 2000)
        {
            time = r3();
        }
        else if(size>=2000&&size < 2500)
        {
            time = r4();
        }
        else if(size>=2500&&size < 3000)
        {
            time = r5();
        }
        else if(size>=3000&&size < 3500)
        {
            time = r6();
        }
        else if(size>=3500&&size < 4000)
        {
            time = r7();
        }
        else if(size>=4000&&size < 4500)
        {
            time = r8();
        }
        else
        {
            time = r9();
        }
        
        return time;
        
    }
    
     string assignIO()
    {
        RandomSeq r1(1,5);
        int num = r1();
        string need="";
        
        if(num == 1)
        {
            need = "keyboard";
        }
        else if(num == 2)
        {
            need = "mouse";
        }
        else if(num == 3)
        {
            need = "Both"; // keyboard and mouse
        }
        else if(num == 4)
        {
            need ="file";
        }
        else
        {
            need = "nothing";
        }
        return need;
    }
    
    
     void setHeader()
    {
        RandomSeq r1(0,4);
        RandomSeq r2(0,3);
        RandomSeq r3(0,2);
        INT_ITER hIter = header.begin();
        header.insert(hIter,r1());
        header.insert(hIter+1,r2());
        header.insert(hIter+2,r3());
    }
    
     int getNumberOfFiles() {
        return numOfFiles ;
    }
    void test(){
        cout << "Testing JobCreationFactory\n";
    }
        
};
int main(){
    return 0;
}

//.hxx如下:

#ifndef JobCreationFactory_hxx__
#define JobCreationFactory_hxx__
#include "HardDisk.hxx"
class JobCreationFactory {
public:
    //JobCreationFactory(){
    //}
    int getNumberOfJobs();
    void createFiles(HardDisk hd);
    void createJobs(HardDisk hd);
    int assignSize();
    int assignTime(int size);
    string assignIO();
    void setHeader();
    int getNumberOfFiles();
    void test();
};

#endif // JobCreationFactory_hxx_

单独编译是对语法错误的合理测试,但单独链接是没有意义的,会丢失一些东西。

因此找到编译器选项进行不链接编译(Microsoft Visual C++:/c, g++: -c)并使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 链接错误 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 按成员序列化

    我已经实现了template
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • Eclipse 抱怨 Web 应用程序属性

    我的 web xml 中的网络应用程序声明是
  • 如何强制MySQL将0作为有效的自增值

    长话短说 我有一个 SQL 文件 我想将其导入为skelstyle 文件 因此这将以编程方式重复完成 我可以根据需要编辑 SQL 文件 但我不想碰应用程序本身 该应用程序使用userid 0代表匿名用户 它在数据库中还有一个相关 空白 条目
  • 如何使用鼠标改变OpenGL相机

    我正在尝试在 OpenGL 中设置一个相机来查看 3 维中的一些点 为了实现这一点 我不想使用旧的 固定的功能样式 glMatrixMode glTranslate 等 而是自己设置模型视图投影矩阵并在我的顶点着色器中使用它 正交投影就足够
  • 无法从 Activity 调用 getSupportFragmentManager()

    我有一个有片段的活动 XML
  • woocommerce 下订单前检查邮政编码

    由于本地送货是唯一的选择 由于产品送货限制 我不希望客户进入结帐页面并必须填写他们的所有详细信息 然后才发现我们没有送货到他们的邮政编码 因此 我需要在结帐页面上进行与本地配送邮政编码检查相同的功能 但要在结帐过程的早期阶段添加 例如在购物
  • 何时实现接口以及何时扩展超类?

    我读了很多关于 Java 中的接口和类继承的文章 我知道如何做到这两点 并且我认为我对两者都有很好的感觉 但似乎没有人真正将两者并排比较 并解释何时以及为何要使用其中之一 我没有发现很多时候实现接口会比扩展超类更好 那么什么时候实现接口以及
  • 打开屏幕键盘

    我如何从我的应用程序中打开所有 Mac OS X 中内置的键盘查看器 在 10 5 及更早版本中 这是它的路径 因此只需像平常一样启动它即可 System Library Components KeyboardViewer componen
  • render 在 useEffect 之前调用

    我正在尝试使用 React 和 Leva js 创建一个简单的应用程序 基本上有一个项目数组 每个项目都有一个名称和一个数字数组 Leva 面板包含两个选择 用户可以从项目数组中选择两个项目 如果两个选定的项目具有相同的长度 则可以 否则应
  • 以编程方式将可绘制对象设置为背景

    编辑 抱歉 我从您的评论中意识到我的问题不够清楚 我将发布一个新的 对此深表歉意并感谢您的回答 我正在从 Json 文件填充 ListView With my 列表适配器 我可以轻松地将适当的 json 数据分配给列表的每一行 这对于文本很
  • 为什么浏览器中的 mocha 会抛出从 url 检测到的全局泄漏,而不是从 unc 路径检测到的全局泄漏?

    我正在创建一个 javascript 库并想要使用 BDD 所以我尝试了 mocha 但无法使其工作 我希望在客户端上使用该库 因此我假设让它从可浏览的 url 运行 在 Web 连接的上下文中运行是有意义的 而不仅仅是来自 unc 路径的
  • 用于分布式 DB2 数据库的 Spring Batch Reader

    我正在尝试使用 Spring 批处理框架编写一个作业 作业需要从集群 db2 数据库获取数据 对每个获取的记录调用一些逻辑 然后将转换后的数据存储在同一个数据库中 与读取数据的表不同 我正在尝试写step1如下 Bean public St
  • Mysql 之间和等于在哪里?

    我有一个mysql函数 SELECT FROM stats WHERE BETWEEN 2011 01 03 AND 2011 01 01 AND email email protected cdn cgi l email protecti
  • 如何捕获回击后返回活动的事件

    我的应用程序有一个主屏幕 然后会进入不同的屏幕 每个屏幕都会返回主屏幕 每次用户 返回 主屏幕时我都想做一些事情 我如何捕获这种事件 在您的主活动中使用 onResume 方法或通过重写子活动中的 keyDown 方法在您的活动中使用 st
  • 如何将 Firebase 数据库持久性存储限制为仅某些节点?

    将以下代码添加到AppDelegate将使 Firebase 数据库在用户离线时可用 FIRDatabase database persistenceEnabled true 我们怎样才能使数据库的某些部分在离线模式下可用 而另一些部分在用
  • 获取纸质单选按钮的值

    我有以下代码
  • UITableview 中的自动布局与动态单元格高度

    对于我的表格视图单元格的动态高度 我从此链接中引用 在 UITableView 中使用自动布局来实现动态单元格布局和可变行高 https stackoverflow com questions 18746929 using auto lay
  • Grails 和子域

    Grails 知道有关子域 即 subdomain domain com 的任何信息吗 我没有看到它在manual http grails org doc 2 0 x guide single html 这纯粹是应用程序服务器 网络服务器问
  • Pygame.mixer 模块丢失?

    我正在尝试为朋友制作一个小程序 它需要运行 wav 文件 当我在 python 中运行它时它工作正常 但是当我在 py2exe 中编译它时它给了我这个 gt phone exe 23 RuntimeWarning use mixer DLL
  • 函数参数的模式匹配

    我有一个元组向量 val l for i lt 1 to 5 yield i i 2 Vector 1 2 2 4 3 6 4 8 5 10 我想用以下方式总结一下 l reduce x y gt x 1 y 1 x 2 y 2 15 30
  • C++ 链接错误

    我有多个通过 hxx 头文件和继承连接的类 这都是关于操作系统模拟的 我单独编译它们 看看是否有任何语法错误 但事实并非如此 相反 当我编译主驱动程序 osTester cxx 时 我得到这样的链接错误 include