This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CODECOMPOSER:CCS 是否识别 C++类?

Guru**** 2328790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1468014/codecomposer-does-ccs-recognize-c-classes

器件型号:CODECOMPOSER
Thread 中讨论的其他器件:TM4C123GH6PM

工具与软件:

我收到错误消息:"#20 identifier "class" is undefined"(此类的标识符"class"未定义")。 我在此文件中还收到错误消息:"#66 expected a ";""。 类是 C++的正常部分。 为什么这么简单的东西不起作用?

Buffer.h:

#ifndef BUFFER_H_
#define BUFFER_H_


#define MAX_BUFFER_SIZE 256

class Buffer
{
private:

    char* items;
    int count;
    int size;
    int head;
    int tail;

public:

    Buffer();
    Buffer(int);
    ~Buffer();
    void wipe();
    bool isEmpty();
    bool isFull();
    char dequeue();
    bool enqueue(char);
};

#endif /* BUFFER_H_ */

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nick、

    我认为此处所发生的情况是编译器将您的代码视为 C  

    您可以更改文件扩展名、也可以通过编译器选项告诉编译器您正在使用 C++。

    我不确定您使用的是什么器件、因此我不确定正在使用哪个编译器。  但一般而言、编译器选项中会有一些东西来控制这种情况。 这是 CCSv20中 C2000编译器的样子。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我启用了如您所说的"将 C 文件视为 C++文件"、但现在"tm4c123gh6h_startup_ccs.c"中出现错误 、内容为"#821严重形成的 pragma "。 在我启用 C++选项之前、这不是错误。 此文件是由项目生成的、因此我认为不应对其进行太多更改。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将程序重命名为 x.cpp。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是说要将 main.c 重命名为 main.cpp 吗?

    main.c:

    #include "clock.h"
    #include "uart.h"
    
    
    int main(void)
    {
    	Clock_Init();
    
    	UART0_Init();
    
    	while (1)
    	{
    	}
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这种方法的问题...

    我已启用"将 C 文件视为 C++文件"

    ...是它假定所有文件的扩展名 .c. 包含 C++代码。  即使是不喜欢的文件也是如此  tm4c123gh6ple_startup_ccs.c .   

    我不确定最佳解决方案。  一种解决方案是不使用 --- cpp_default 、将所有 C++文件的文件扩展名更改为 cpp .  另一种解决方案是使用 --- cpp_default 对于工程编译、但使用 CCS 的文件特定选项功能来禁用 --- cpp_default 不能使用它的每个 C 文件的 C 语言。

    谢谢。此致、

    -George.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我唯一的 C++文件是 Buffer.h 和 Buffer.cpp。 您是否建议重命名 Buffer.h? 如果我选择性地启用"将 C 文件视为 C++文件"、我仍然会在头文件内收到第一个错误"#20 identifier "class" is undefined"。 这个问题不在我的任何 C 源文件中、而是在我的头文件 Buffer.h 中出现

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在中添加代码 Buffer.h 处理方式与包含它的源文件中其余代码相同。  带有默认选项(如果包含在具有文件扩展名的文件中) cpp 则将其作为 C++代码处理。 如果它包含在具有文件扩展名的文件中 .c. 则将其作为 C 代码处理。

    谢谢。此致、

    -George.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Buffer.cpp 和 uart.c 均包含 Buffer.h 如果我将 uart.c 视为 C++、我会从在 uart.c 中调用的 TivaWare 外设驱动程序库函数中得到一组"未解析的符号"错误 你会让我做什么? 在 CCS 中根本不可能实现的是什么?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅 此常见问题解答页面 (并非来自 TI)、了解如何混合 C 和 C++代码。  我非常确信您的解决方案是添加线条 Buffer.h 类似于...

    #ifdef __cplusplus
    /* C++ only lines here */
    #endif

    谢谢。此致、

    -George.