我有一个用rtstring.c文件编写的字符串函数,它只接受一个字符串并返回相同的字符串。 然后我将此文件包含在body.cpp文件中,我想从中传递字符串 这个文件到c文件。 我该怎么做才能帮忙
我的代码
rtstring.c
#include <stdio.h>
char * rtstr(char * s)
{
return s;
}
body.cpp
#pragma once
#include "header.h"
#include "rtstring.c"
mystring::mystring(string str)
{
st=str;
}
string mystring::strreturn(string s1)
{
st=rtstr(s1);
return st;
}
header.h
#pragma once
class mystring
{
public:
mystring(string a);
string strreturn(string s1);
private:
string st;
}
的main.cpp
#include <iostream>
using namespace std;
#include "header.h"
int main()
{
string rs,s="hi hello";
mystring str1(s);
rs=str.strreturn(s);
cout<<"string from c"<<rs;
return 0;
}
我收到返回类型不匹配和许多相关错误的错误。无论如何都要帮忙处理它。一个例子将是有帮助的。 提前致谢
答案 0 :(得分:2)
我收到错误的返回类型不匹配
如果您要阅读完整的错误消息,我确定它会告诉您这是问题所在:
char * rtstr(char * s)
// ^^^^^^
string mystring::strreturn(string s1)
// ^^^^^^
{
st=rtstr(s1);
// ^^
您正在尝试将std::string
传递给期望char*
的函数。
要解决此问题,请勿尝试将std::string
传递给期望char*
的函数。您可能会发现std::string::c_str()
成员函数很有用。
#include "rtstring.c"
不要包含源文件。特别是不要包含用其他语言编写的源文件。
要调用另一个源文件中定义的函数,只需在调用源中声明该函数并链接另一个源的目标文件。请记住在声明跨语言函数时设置语言链接。您将找到用于包含函数声明的头文件。
答案 1 :(得分:0)
您的代码对我来说不太清楚,但我理解您的问题。
因此,最简单的方法之一是使用C编程将字符串写入文件,然后在cpp程序中读取相同的文件。
你的C程序写入文件:
#include <stdio.h>
#include <stdlib.h> /* For exit() function */
int main()
{
char s[1000];
FILE *fptr;
fptr = fopen("program.txt", "w");
if(fptr == NULL)
{
printf("Error!");
exit(1);
}
printf("Enter your string:\n");
gets(s);
fprintf(fptr,"%s", s);
fclose(fptr);
return 0;
}
你的cpp程序就是这样读取同一个文件。
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{
char c,fname[20] = 'program.txt';
clrscr();
ifstream in(fname);
if(!in)
{
cout<<"File Does not Exist";
getch();
return;
}
cout<<"\n\n";
while(in.eof()==0)
{
in.get(c);
cout<<c;
}
getch();
}
另一种选择可能是使用pipe()
功能。 More details.
答案 2 :(得分:0)
我已经找到了最符合我要求的方式。 感谢您的帮助。 我所做的改变如下
body.cpp `
int index = -1;
for (int i=0; i< [arrJSON count]; i++){
NSDictionary *dict = [arrJSON objectAtIndex:i];
if ([[dict objectForKey:@"id"] isEqualToString:@"123456"]){
NSLog(@"Found at index: %d",i);
index = i;
break;
}
}
if (index == -1){
NSLog(@"ID not found");
}
` 请插入适当的标题。 &#34;使用命名空间std;&#34;在header.h和body.cpp中都有 &#34;#包括&#34;在header.h中
答案 3 :(得分:-1)
首先,您不包含源文件。你应该使rtstring.c成为自己的标题,你在其中声明函数rtstr
。
其次,您正在使用C ++编译器。如果您希望它模拟C,请使用using "C" { ... }
。正确的C和C ++之间仍然存在根本区别,所以你仍然使用C ++的C子集,而不是实际的C.
最后,如果您想将std::string
转换为C字符串(char*
),则可以使用其c_str()
函数。