【问题标题】:"undefined reference to 'operator new(unsigned int)' and undefined reference to class functions (and constructor)“对‘operator new(unsigned int)’的未定义引用和对类函数(和构造函数)的未定义引用
【发布时间】:2018-03-31 06:22:45
【问题描述】:

我正在尝试使用 Atmel Studio 7 为 ATxmega16E5 编写代码。 我在论坛上进行了长时间的搜索,并且无法对似乎与我自己的问题相似的其他建议做出头或尾。 (很多建议表明要更改编译选项,我不知道如何在 Atmel Studio 中执行此操作)。

基本上,我已经包含了我的课程 GPP.h 但是,当我尝试在 main.cpp 中实例化一个类时,它会作为对包括构造函数在内的所有函数的一系列未定义引用返回。

编辑:减少包含的代码量,以专注于手头的主要问题, 主要是文件似乎没有链接。

main.cpp:

//INCLUDES
#include "GPP.h"

//MAIN FUNCTION
int main()
{

    GPP *gpp = new GPP();

    //Turn on system power
    gpp->setPowerPin();
    gpp->screenOn();

    // ...etc (just makes some function calls

    // ...
    while(1);
}

GPP.h:

#ifndef GPOWERPACK_H
#define GPOWERPACK_H


class GPP
{   
public:

    GPP();
    //~GPP();

    void setPowerPin();
    void screenOn();
    void SPI_Init();
    void SPI_SendNext();
    void displayLogo();     
};
#endif

任何帮助都会帮助我加深对 cpp 的理解。 我以前用 c 和 java 编写过代码。

Atmel Makefile 很长,能否按要求显示部分?

【问题讨论】:

  • 您来自 Java 还是 C# 环境?因为您尝试为不是指针的变量动态分配数据。例如SPI_DATA_BUFFER = new LinkedList<dataBits>()。那不是现在它在 C++ 中工作。或许你应该重新开始by reading a couple of good beginner books
  • 至于您的错误,它表明您实际上并没有使用GPP.cpp 构建。因为如果你这样做了,你不应该得到链接器错误,而是编译器错误(例如关于错误使用new)。
  • 1) 您是否将所有目标文件链接在一起?向我们展示用于将文件编译/链接为可执行文件的命令行。 2) 那些不必要的news 是怎么回事?你真的需要动态分配实例吗?
  • 感谢您的提示。我是新来的。我来自java环境。 SPI_DATA_BUFFER 完全转移了我的注意力——所以谢谢你帮我解决这个问题。真正的问题:在确定是动态分配还是(静态相反?)分配类时应该考虑什么?我也会阅读“好问题”链接,谢谢一些程序员老兄。 :) Algirdas,我正在使用 Atmel Studio 进行编译,这是问题的一部分,我不知道如何更改 Atmel 程序本身中的命令。有什么想法吗?

标签: c++ include linker-errors undefined-reference atmelstudio


【解决方案1】:

适用于第一次使用 Atmel Studio 的任何人。 还有那些只是忘记了 makefile 基础知识的人。

我想出了一个简单的方法来解决我的链接器问题。

出现“未定义引用”错误是因为我没有在项目构建中包含文件 GPP.cpp 和 GPP.h。

修复: 1)打开“解决方案资源管理器”

2) 右键单击​​您的项目,转到添加 -> 现有项目

3) 选择您包含的文件/与您的项目构建相关的文件,然后单击

对于这个误导性的问题,我们深表歉意。事后看来是一个简单的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多